| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
高手帮忙给看看,为什么老是WA,答案正确呀,谢谢谢谢!!!//思路就是线对输入进行处理,记录每个字母的左上边坐标和右下边坐标,每次判断如果成立就把这个字母原来位置改成'.'继续判断,判断的时候把'.'看做和当前字母一样。
#include <iostream>
#include <fstream>
using namespace std;
int m,n;
char c[35][35];
struct cp{
char str;
int leftx,lefty;
int rightx,righty;
} ch[100];
int chnum;
char sol[50];
int solnum;
int mark[50];
bool check(int p){
char curc=ch[p].str;
int lx=ch[p].leftx;
int ly=ch[p].lefty;
int rx=ch[p].rightx;
int ry=ch[p].righty;
for(int i=lx;i<=rx;i++){
if(c[i][ly]!=curc&&c[i][ly]!='.')return false;
if(c[i][ry]!=curc&&c[i][ry]!='.')return false;
}
for(i=ly;i<=ry;i++){
if(c[lx][i]!=curc&&c[lx][i]!='.')return false;
if(c[rx][i]!=curc&&c[rx][i]!='.')return false;
}
for(i=lx;i<=rx;i++){
c[i][ly]='.';
c[i][ry]='.';
}
for(i=ly;i<=ry;i++){
c[lx][i]='.';
c[rx][i]='.';
}
// cout<<"YES"<<endl;
return true;
}
void func(char cc,int x,int y){
for(int i=0;i<chnum;i++){
if(ch[i].str==cc)break;
}
if(i==chnum){
ch[chnum].str=cc;
ch[chnum].leftx=x;
ch[chnum].rightx=x;
ch[chnum].lefty=y;
ch[chnum].righty=y;
chnum++;
}else{
if(x<=ch[i].leftx&&y<=ch[i].lefty){
ch[i].leftx=x;ch[i].lefty=y;
}
if(x>=ch[i].rightx&&y>=ch[i].righty){
ch[i].rightx=x;ch[i].righty=y;
}
}
}
void init(){
chnum=0;
solnum=0;
memset(mark,0,sizeof(mark));
for(int i=0;i<100;i++){
ch[i].leftx=10000;
ch[i].lefty=10000;
ch[i].rightx=-1;
ch[i].righty=-1;
}
}
/*
void print(){
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
cout<<c[i][j];
}
cout<<endl;
}
}
*/
void main(){
ifstream cin("data.txt");
while(cin>>m>>n){
init();
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
cin>>c[i][j];
if(c[i][j]!='.'){
func(c[i][j],i,j);
}
}
}
/* for(i=0;i<chnum;i++){
cout<<ch[i].str<<" "<<ch[i].leftx<<" "<<ch[i].lefty<<" "<<ch[i].rightx<<" "<<ch[i].righty<<endl;
}*/
i=0;
while(i<chnum){
for(int k=0;k<chnum;k++){
if(mark[k]==0){
if(check(k)){
mark[k]=1;
sol[i++]=ch[k].str;
// print();
// cout<<endl;
}
}
}
}
for(i=chnum-1;i>=0;i--){
cout<<sol[i];
}
cout<<endl;
}
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator