2 条题解
-
0
#define LL long long using namespace std; int in[26]; bool g[26][26]; bool vis[26]; vector<int> ord; bool dfs(int u){ vis[u] = true; for(int v=0;v<26;v++){ if(g[u][v]){ if(vis[v]) return false; if(!dfs(v)) return false; } } ord.push_back(u); return true; } bool check(){ memset(in,0,sizeof in); memset(g,0,sizeof g); memset(vis,0,sizeof vis); ord.clear(); return true; } int main(){ int T; cin>>T; while(T--){ int n; cin>>n; vector<string> strs(n); for(int i=0;i<n;i++) cin>>strs[i]; check(); bool ok = true; for(int i=0;i<n&&ok;i++){ for(int j=i+1;j<n&&ok;j++){ int len = min(strs[i].size(), strs[j].size()); int k=0; while(k<len&&strs[i][k]==strs[j][k]) k++; if(k==len){ if(strs[i].size()>strs[j].size()) ok=false; }else{ int u = strs[i][k]-'a'; int v = strs[j][k]-'a'; if(!g[u][v]){ g[u][v] = true; in[v]++; } } } } if(!ok){ cout<<"0"<<endl; continue; } queue<int> q; for(int i=0;i<26;i++){ if(in[i]==0) q.push(i); } vector<int> res; while(!q.empty()){ int u = q.front(); q.pop(); res.push_back(u); for(int v=0;v<26;v++){ if(g[u][v]){ in[v]--; if(in[v]==0) q.push(v); } } } for(int i=0;i<26;i++){ if(in[i]>0){ ok=false; break; } } if(!ok){ cout<<"0"<<endl; continue; } string t; for(auto s:strs) t += s; string sorted_t = t; sort(sorted_t.begin(), sorted_t.end()); if(t == sorted_t){ cout<<"1"<<endl; }else{ bool flag = true; for(int i=0;i<t.size()-1&&flag;i++){ if(t[i]>t[i+1]) flag=false; } cout<<(flag?"1":"0")<<endl; } } return 0; } //:) //114514你们的有我"简洁吗"
信息
- ID
- 3246
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 3
- 标签
- 递交数
- 81
- 已通过
- 26
- 上传者