2 条题解

  • 4
    @ 2026-1-30 15:34:32
    #include<bits/stdc++.h>
    using namespace std;
    int main(){
        int t;
        cin>>t;
        while(t--){
            int n;
            cin>>n;
            vector<string>a(n);
            for(int i=0;i<n;i++){
                cin>>a[i];
            }
            sort(a.begin(),a.end());
            string t="";
            for(int i=0;i<n;i++){
                t+=a[i];
            }
            int f=1;
            for(int i=1;i<t.size();i++){
                if(t[i-1]>t[i])
                    f=0;
            }
            cout<<f<<endl;
        }
        return 0;
    }
    
    • 0
      @ 2026-5-2 8:30:55
      #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
      
      

      你们的有我"简洁吗"

      • 1

      信息

      ID
      3246
      时间
      1000ms
      内存
      256MiB
      难度
      3
      标签
      递交数
      81
      已通过
      26
      上传者