The Himalayas http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5341
签到
1 #include<cstdio> 2 int main(){ 3 int t,n,a[64]; 4 while(~scanf("%d",&t)){ 5 while(t--){ 6 scanf("%d",&n); 7 for(int i=1;i<=n;i++){ 8 scanf("%d",&a[i]); 9 } 10 int ans=0; 11 for(int i=2;i<n;i++){ 12 if(a[i]>a[i-1]&&a[i]>a[i+1]){ 13 ans++; 14 } 15 } 16 printf("%d ",ans); 17 } 18 } 19 return 0; 20 }
Pretty Poem http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5350
string
1 #include<cstdio> 2 #include<cctype> 3 #include<iostream> 4 using namespace std; 5 char sin[64],sout[64]; 6 string a1,a2,a3,b1,b2,b3,c; 7 int main(){ 8 int t; 9 scanf("%d",&t); 10 while(t--){ 11 scanf("%s",sin); 12 int ls=0; 13 for(int i=0;sin[i];i++){ 14 if(isalpha(sin[i])){ 15 sout[ls++]=sin[i]; 16 } 17 } 18 bool flag=false; 19 for(int la=1;la<=ls;la++){ 20 for(int lb=1;lb<=ls;lb++){ 21 if(la*3+lb*2==ls){///"ABABA" 22 a1=a2=a3=b1=b2=""; 23 int s=0; 24 for(int i=0;i<la;i++){ 25 a1+=sout[s+i]; 26 } 27 s+=la; 28 for(int i=0;i<lb;i++){ 29 b1+=sout[s+i]; 30 } 31 s+=lb; 32 for(int i=0;i<la;i++){ 33 a2+=sout[s+i]; 34 } 35 s+=la; 36 for(int i=0;i<lb;i++){ 37 b2+=sout[s+i]; 38 } 39 s+=lb; 40 for(int i=0;i<la;i++){ 41 a3+=sout[s+i]; 42 } 43 s+=lb; 44 if(a1==a2&&a1==a3&&b1==b2&&a1!=b1){ 45 flag=true; 46 break; 47 } 48 } 49 if(la*3+lb*3<ls){///"ABABCAB" 50 a1=a2=a3=b1=b2=b3=c=""; 51 int s=0; 52 for(int i=0;i<la;i++){ 53 a1+=sout[s+i]; 54 } 55 s+=la; 56 for(int i=0;i<lb;i++){ 57 b1+=sout[s+i]; 58 } 59 s+=lb; 60 for(int i=0;i<la;i++){ 61 a2+=sout[s+i]; 62 } 63 s+=la; 64 for(int i=0;i<lb;i++){ 65 b2+=sout[s+i]; 66 } 67 s+=lb; 68 int lc=ls-3*la-3*lb; 69 for(int i=0;i<lc;i++){ 70 c+=sout[s+i]; 71 } 72 s+=lc; 73 for(int i=0;i<la;i++){ 74 a3+=sout[s+i]; 75 } 76 s+=la; 77 for(int i=0;i<lb;i++){ 78 b3+=sout[s+i]; 79 } 80 s+=lb; 81 if(a1==a2&&a1==a3&&b1==b2&&b1==b3&&a1!=b1&&a1!=c&&b1!=c){ 82 flag=true; 83 break; 84 } 85 } 86 } 87 if(flag) break; 88 } 89 if(flag) puts("Yes"); 90 else puts("No"); 91 } 92 return 0; 93 }
Untrusted Patrol http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5343
并查集
1 #include<cstdio> 2 #include<cstring> 3 #define mt(a,b) memset(a,b,sizeof(a)) 4 const int M=100010; 5 struct G { 6 struct E { 7 int v,next; 8 } e[M<<2]; 9 int le,head[M]; 10 void init() { 11 le=0; 12 mt(head,-1); 13 } 14 void add(int u,int v) { 15 e[le].v=v; 16 e[le].next=head[u]; 17 head[u]=le++; 18 } 19 } g; 20 class UnionFindSet { ///并查集 21 int par[M]; 22 public: 23 void init() { 24 mt(par,-1); 25 } 26 int getroot(int x) { 27 int i=x,j=x,temp; 28 while(par[i]>=0) i=par[i]; 29 while(j!=i) { 30 temp=par[j]; 31 par[j]=i; 32 j=temp; 33 } 34 return i; 35 } 36 bool unite(int x,int y) { 37 int p=getroot(x); 38 int q=getroot(y); 39 if(p==q)return false; 40 if(par[p]>par[q]) { 41 par[q]+=par[p]; 42 par[p]=q; 43 } else { 44 par[p]+=par[q]; 45 par[q]=p; 46 } 47 return true; 48 } 49 } F; 50 bool vis[M]; 51 int need[M]; 52 int main() { 53 int t,n,m,K,u,v,L; 54 scanf("%d",&t); 55 while(t--) { 56 scanf("%d%d%d",&n,&m,&K); 57 mt(vis,0); 58 for(int i=0; i<K; i++) { 59 scanf("%d",&u); 60 vis[u]=true; 61 } 62 g.init(); 63 while(m--) { 64 scanf("%d%d",&u,&v); 65 g.add(u,v); 66 g.add(v,u); 67 } 68 scanf("%d",&L); 69 for(int i=0; i<L; i++) { 70 scanf("%d",&need[i]); 71 } 72 bool ans=true; 73 if(L<K) { 74 ans=false; 75 } 76 if(ans) { 77 F.init(); 78 vis[need[0]]=false; 79 for(int u=1; u<=n; u++) { 80 if(!vis[u]) { 81 for(int i=g.head[u]; ~i; i=g.e[i].next) { 82 int v=g.e[i].v; 83 if(!vis[v]) { 84 F.unite(u,v); 85 } 86 } 87 } 88 } 89 for(int x=1; x<L; x++) { 90 int u=need[x]; 91 vis[u]=false; 92 for(int i=g.head[u]; ~i; i=g.e[i].next) { 93 int v=g.e[i].v; 94 if(!vis[v]) { 95 F.unite(u,v); 96 } 97 } 98 if(F.getroot(need[x-1])!=F.getroot(u)) { 99 ans=false; 100 break; 101 } 102 } 103 } 104 if(ans) { 105 int num=0; 106 for(int i=1; i<=n; i++) { 107 if(F.getroot(i)==i) num++; 108 if(num>1) { 109 ans=false; 110 break; 111 } 112 } 113 } 114 if(ans) puts("Yes"); 115 else puts("No"); 116 } 117 return 0; 118 }
end