| ||||||||||
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 |
郁闷死了,关于judge的下面这个程序,在check()函数的最后加上while(1)这个死循环就ac了,不加就wa了,用c++就OLE了,为什么啊 #include <iostream> #include <string> #include <algorithm> using namespace std; #define REP(i,n) for(int i = 0;i < (n);++ i) #define FOR(i,s,n) for(int i = (s);i < (n);++ i) #define CLEAR(x) memset(x,0,sizeof(x)) #define N 400 int n,d,tot,a,b,mark; string w[N],tw[N]; bool dfs(int i,int j,int no) { if(no > d) return 0; if(i == w[a].size() && j == w[b].size()) return 1; if(w[a][i] == w[b][j]) return dfs(i+1,j+1,no); bool ok = 0; if(w[a][i] == w[b][j+1] && w[a][i+1] == w[b][j]){ swap(w[a][i],w[a][i+1]); ok |= dfs(i+1,j+1,no+1); swap(w[a][i],w[a][i+1]); } if(w[a][i] == w[b][j+1]) ok |= dfs(i,j+1,no+1); if(w[a][i+1] == w[b][j]) ok |= dfs(i+1,j,no+1); return ok || dfs(i+1,j+1,no+1); } bool check(int _i,int _j) { a = _i,b = _j; if(w[b].size() > w[a].size()) swap(a,b); if(w[a].size() - w[b].size() > d) return 0; if(w[a].size() - w[b].size() == d){ int i,j,no; for(i = 0,j = 0,no = 0;i < w[a].size();i++,j++) while(w[a][i] != w[b][j] && i < w[a].size()) { i++,no++; if(no > d) return 0; } if(j < w[b].size()) return 0; return 1; } if(d == 1){ int no = 0; REP(i,w[a].size()) if(w[a][i] != w[b][i]) no++; if(no <= 1) return 1; no = 0; REP(i,w[a].size()) if(w[a][i] != w[b][i]) { if(w[a][i+1] != w[b][i]) { w[a] = tw[a]; return 0; } swap(w[a][i],w[a][i+1]),no++; } w[a] = tw[a]; if(no <= 1) return 1; return 0; } if(d == 2){ bool ok; if(w[a].size() - w[b].size() == 1){ REP(i,w[a].size()){ w[a].erase(i,1); if(dfs(0,0,1)) ok = 1; w[a] = tw[a]; if(ok) return 1; } return 0; } ok = dfs(0,0,0); w[a] = tw[a]; return ok; } while(1); //为什么加上这个死循环就ac,不加就wa } int main() { while(cin >> n >> d && n) { REP(i,n) cin >> w[i]; sort(w,w+n); REP(i,n) tw[i] = w[i]; tot = 0; REP(i,n) FOR(j,i+1,n) if(check(i,j)) cout << tw[i] << "," << tw[j] << endl,tot++; cout << tot << endl; } return 0; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator