Description
Input
Output
Sample Input
3 2 acm ibm 3 acm malform mouse 2 ok ok
Sample Output
The door cannot be opened. Ordering is possible. The door cannot be opened.
(在此提出一个疑问,我用的查找入度为0且存在的字母为头来写为啥死活不a????(当然输入时如果首尾两个字符相同,我就不加入度和出度,这样就不会重复,各种测试数据都过了)求大牛看到助解答)
下面是没a的我觉得很正确的代码呜呜呜~~~~~~~
#include <iostream> #include<stdio.h> #include<string.h> #include<algorithm> using namespace std; int a[27][27],rd[30],cd[30],cz[26]; char cc[1010]; int n; bool hh() { int s=0,k; for(int i=0;i<26;i++) if(rd[i]==0&&cz[i]==1)s++,k=i; if(s!=1&&s!=0) return 0; else { int x=0,y=0,z=0; for(int i=0;i<26;i++) if(rd[i]==cd[i]) x++; else if(rd[i]-cd[i]==1) y++; else if(rd[i]-cd[i]==-1) z++; else return 0; if((y==0&&z==0)||(y==1&&z==1)) return 1; else return 0; } } int main() { int t; scanf("%d",&t); while(t--) { memset(a,0,sizeof(a)); memset(rd,0,sizeof(rd)); memset(cd,0,sizeof(cd)); memset(cz,0,sizeof(cz)); scanf("%d",&n); while(n--) { //getchar(); scanf("%s",cc); int l=strlen(cc); if(cc[0]-'a'!=cc[l-1]-'a') { if(a[cc[0]-'a'][cc[l-1]-'a']==0) a[cc[0]-'a'][cc[l-1]-'a']++; rd[cc[l-1]-'a']++; cd[cc[0]-'a']++; } if(cz[cc[0]-'a']==0) cz[cc[0]-'a']=1; if(cz[cc[l-1]-'a']==0) cz[cc[l-1]-'a']=1; } int h=hh(); if(h)printf("Ordering is possible.\n"); else printf("The door cannot be opened.\n"); } return 0; }
#include <iostream> #include<stdio.h> #include<string.h> #include<algorithm> using namespace std; int f[100010],rd[30],cd[30],cz[26]; char cc[1010]; int n; int ff(int x) { if(x==f[x])return x; return ff(f[x]); } void hh() { int s=0,k; for(int i=0;i<26;i++) if(f[i]==i&&cz[i]==1)s++,k=i; // cout<<s<<endl; if(s>1) { printf("The door cannot be opened.\n"); return ; } else { int z=0,y=0; for(int i=0;i<26;i++) if(cz[i]==1&&rd[i]!=cd[i]) { if(rd[i]-cd[i]==1) y++; else if(rd[i]-cd[i]==-1) z++; else { printf("The door cannot be opened.\n"); return ; } } if((y==0&&z==0)||(y==1&&z==1)) { printf("Ordering is possible.\n"); return ; } else { printf("The door cannot be opened.\n"); return; } } } int main() { int t; scanf("%d",&t); while(t--) { memset(rd,0,sizeof(rd)); memset(cd,0,sizeof(cd)); memset(cz,0,sizeof(cz)); for(int i=0;i<100000;i++) f[i]=i; scanf("%d",&n); while(n--) { scanf("%s",cc); int l=strlen(cc); rd[cc[l-1]-'a']++; cd[cc[0]-'a']++; f[cc[l-1]-'a']=f[cc[0]-'a']=ff(cc[0]-'a'); if(cz[cc[0]-'a']==0) cz[cc[0]-'a']=1; if(cz[cc[l-1]-'a']==0) cz[cc[l-1]-'a']=1; } hh(); } return 0; }