The 2018 ACM-ICPC Asia Beijing Regional Contest
阿新 • • 發佈:2018-11-15
http://hihocoder.com/problemset/problem/
#1870 : Jin Yong’s Wukong Ranking List
我是每加1個點就dfs判斷1次。
正解是拓撲排序。。。
1 #include <cstdio> 2 #include <cstdlib> 3 #include <ctime> 4 #include <cstring> 5 #include <string> 6 #include <map> 7 #include <set> 8 #include <list> 9 #include <queue> 10 #include <vector> 11 #include <bitset> 12 #include <algorithm> 13 #include <iostream> 14 using namespace std; 15 const int maxn=50; 16 17 bool vis[maxn]; 18 char str[maxn][maxn],a[maxn],b[maxn],result1[maxn],result2[maxn];19 vector<int>e[maxn]; 20 int r; 21 22 void dfs(int d) 23 { 24 vector<int>::iterator j; 25 vis[d]=1; 26 for (j=e[d].begin();j!=e[d].end();j++) 27 if (!vis[*j]) 28 dfs(*j); 29 else 30 { 31 r=1; 32 return; 33 }34 } 35 36 int main() 37 { 38 int n,i,j,k,g; 39 while (~scanf("%d",&n)) 40 { 41 for (i=1;i<=2*n;i++) 42 e[i].clear(); 43 g=0; 44 r=0; 45 for (i=1;i<=n;i++) 46 { 47 scanf("%s%s",a,b); 48 for (j=1;j<=g;j++) 49 if (strcmp(str[j],a)==0) 50 break; 51 if (j==g+1) 52 { 53 g++; 54 strcpy(str[g],a); 55 } 56 57 for (k=1;k<=g;k++) 58 if (strcmp(str[k],b)==0) 59 break; 60 if (k==g+1) 61 { 62 g++; 63 strcpy(str[g],b); 64 } 65 66 e[j].push_back(k); 67 68 memset(vis,0,sizeof(vis)); 69 if (r==0) 70 { 71 dfs(k); 72 if (r==1) 73 { 74 strcpy(result1,a); 75 strcpy(result2,b); 76 } 77 } 78 } 79 80 if (r==0) 81 printf("0\n"); 82 else 83 printf("%s %s\n",result1,result2); 84 } 85 return 0; 86 }
#1871 : Heshen's Account Book
把所有內容放入字串裡,再判斷。
挺多細節要考慮的,程式碼下方有自己編的若干資料。
1 #include <cstdio> 2 #include <cstdlib> 3 #include <ctime> 4 #include <cstring> 5 #include <string> 6 #include <map> 7 #include <set> 8 #include <list> 9 #include <queue> 10 #include <vector> 11 #include <bitset> 12 #include <algorithm> 13 #include <iostream> 14 using namespace std; 15 const int maxn=2e5; 16 const int maxsinlen=20; 17 const int maxlen=1e3+10; 18 const int maxtotallen=3e5; 19 const int maxline=2e2+10; 20 21 char num[maxn][maxsinlen]; 22 char str[maxtotallen],s[maxlen],c; 23 int gx[maxline]; 24 25 int main() 26 { 27 int g=0,len,line=0,ind=0,pos=0,i,j,k; 28 bool vis=1; 29 strcpy(str,""); 30 while (gets(s)) 31 { 32 strcat(str,s); 33 strcat(str,"\n"); 34 } 35 len=strlen(str); 36 37 for (i=0;i<len;i++) 38 { 39 if (str[i]=='\n') 40 { 41 line++; 42 if (i==0 || str[i-1]<'0' || str[i-1]>'9' || str[i+1]<'0' || str[i+1]>'9') 43 { 44 if (vis && i>ind) 45 { 46 // strncpy(num[g++],str+ind,i-ind); 47 ///delete ' ','\n' 48 k=0; 49 for (j=ind;j<i;j++) 50 if (str[j]>='0' && str[j]<='9') 51 num[g][k++]=str[j]; 52 num[g][k]=0; 53 if (!(k>1 && num[g][0]=='0')) 54 { 55 g++; 56 gx[pos]++; 57 } 58 } 59 vis=1; 60 ind=i+1; 61 pos=line; 62 } 63 } 64 else if (str[i]==' ') 65 { 66 if (vis && i>ind) 67 { 68 // strncpy(num[g++],str+ind,i-ind); 69 ///delete ' ','\n' 70 k=0; 71 for (j=ind;j<i;j++) 72 if (str[j]>='0' && str[j]<='9') 73 num[g][k++]=str[j]; 74 num[g][k]=0; 75 if (!(k>1 && num[g][0]=='0')) 76 { 77 g++; 78 gx[pos]++; 79 } 80 } 81 vis=1; 82 ind=i+1; 83 pos=line; 84 } 85 else 86 { 87 if (str[i]<'0' || str[i]>'9') 88 vis=0; 89 } 90 } 91 92 if (g>=1) 93 printf("%s",num[0]); 94 for (i=1;i<g;i++) 95 printf(" %s",num[i]); 96 printf("\n"); 97 98 for (i=0;i<line;i++) 99 printf("%d\n",gx[i]); 100 return 0; 101 } 102 /** 103 12 104 34 105 56 106 78 107 900 108 109 --- 110 111 003 112 004 113 005 114 1 006 a 115 116 --- 117 ''' 118 119 23 123 120 123 123 121 122 123 124 adssa q3qe 125 qw 1 126 qw123 127 12 128 129 130 ''' 131 132 --- 133 134 1234 135 123 136 137 --- 138 139 1234 140 12 34 141 142 --- 143 144 145 1 146 147 2 148 149 3 150 151 as 152 153 4 154 155 --- 156 157 12 158 3 159 4 160 5a 161 162 163 164 --- 165 166 00 167 168 --- 169 170 0 171 172 --- 173 174 0 175 12 176 177 --- 178 179 0 180 12asdb 181 182 --- 183 184 ''' 185 0 186 a 187 0 0 0 0 188 189 12 0 01 100 10 01 0 190 0 191 192 ''' 193 194 **/
#1873 : Frog and Portal
重現賽時,看錯題了,難受。
告誡自己:比賽時,一定要認真讀題,認真分析資料!
1 #include <cstdio> 2 #include <cstdlib> 3 #include <ctime> 4 #include <cstring> 5 #include <string> 6 #include <map> 7 #include <set> 8 #include <list> 9 #include <queue> 10 #include <vector> 11 #include <bitset> 12 #include <algorithm> 13 #include <iostream> 14 using namespace std; 15 #define ll long long 16 const int maxn=1e3+10; 17 18 struct node 19 { 20 int x,y; 21 }f[300]; 22 23 int shu[300],w; 24 25 void cal(ll n) 26 { 27 if (n==0) 28 w=0; 29 else 30 { 31 cal(n>>1); 32 shu[++w]=n & 1; 33 } 34 } 35 36 int main() 37 { 38 ll n; 39 int g,i,j,k; 40 while (~scanf("%lld",&n)) 41 { 42 w=0; 43 cal(n); 44 45 g=0; 46 j=1; 47 k=70; 48 49 for (i=2;i<=w;i++) 50 { 51 ///(k+1)->(k+2) 52 f[++g]={k+1,k+2}; 53 if (shu[i]) 54 { 55 f[++g]={j,k+2}; 56 j+=2; 57 } 58 k+=2; 59 } 60 f[++g]={k,199}; 61 f[++g]={j,70}; 62 f[++g]={j+1,j+1}; 63 if (n==0) 64 f[++g]={199,199}; 65 66 printf("%d\n",g); 67 for (i=1;i<=g;i++) 68 printf("%d %d\n",f[i].x,f[i].y); 69 } 70 return 0; 71 } 72 /* 73 0 74 1 75 2 76 3 77 4 78 79 4294967296 80 4294967295 81 4294967294 82 83 */
#1878 : Palindromes
找規律。
Java TLE了,難受!
關於字串的處理,以後別用Java寫。。。
1 #include <cstdio> 2 #include <cstdlib> 3 #include <ctime> 4 #include <cstring> 5 #include <string> 6 #include <map> 7 #include <set> 8 #include <list> 9 #include <queue> 10 #include <vector> 11 #include <bitset> 12 #include <algorithm> 13 #include <iostream> 14 using namespace std; 15 const int maxn=1e6+10; 16 17 int shu[maxn],ori[maxn]; 18 char str[maxn]; 19 20 int main() 21 { 22 int t,len,i; 23 scanf("%d",&t); 24 while (t--) 25 { 26 scanf("%s",str); 27 len=strlen(str); 28 for (i=1;i<=len;i++) 29 shu[i]=str[len-i]-48; 30 if (str[0]>'1') 31 { 32 ///odd 33 for (i=1;i<=len-1;i++) 34 ori[i]=0; 35 ori[len]=2; 36 37 for (i=1;i<=len;i++) 38 { 39 shu[i]-=ori[i]; 40 if (shu[i]<0) 41 { 42 shu[i]+=10; 43 shu[i+1]--; 44 } 45 } 46 47 printf("%c",shu[len]+1+48); 48 for (i=len-1;i>=1;i--) 49 printf("%c",shu[i]+48); 50 if (len>1) 51 { 52 for (i=2;i<=len-1;i++) 53 printf("%c",shu[i]+48); 54 printf("%c",shu[len]+1+48); 55 } 56 printf("\n"); 57 } 58 else if (len==1) 59 printf("0\n"); 60 else if (str[1]=='0') 61 { 62 ///odd 63 for (i=1;i<=len-2;i++) 64 ori[i]=0; 65 ori[len-1]=2; 66 67 for (i=1;i<=len;i++) 68 { 69 shu[i]-=ori[i]; 70 if (shu[i]<0) 71 { 72 shu[i]+=10; 73 shu[i+1]--; 74 } 75 } 76 77 printf("%c",shu[len-1]+1+48); 78 for (i=len-2;i>=1;i--) 79 printf("%c",shu[i]+48); 80 if (len-1>1) 81 { 82 for (i=2;i<=len-2;i++) 83 printf("%c",shu[i]+48); 84 printf("%c",shu[len-1]+1+48); 85 } 86 printf("\n"); 87 } 88 else 89 { 90 ///even 91 for (i=1;i<=len-2;i++) 92 ori[i]=0; 93 ori[len-1]=1; 94 ori[len]=1; 95 96 for (i=1;i<=len;i++) 97 { 98 shu[i]-=ori[i]; 99 if (shu[i]<0) 100 { 101 shu[i]+=10; 102 shu[i+1]--; 103 } 104 } 105 106 printf("%c",shu[len-1]+1+48); 107 for (i=len-2;i>=1;i--) 108 printf("%c",shu[i]+48); 109 for (i=1;i<=len-2;i++) 110 printf("%c",shu[i]+48); 111 printf("%c",shu[len-1]+1+48); 112 printf("\n"); 113 } 114 } 115 return 0; 116 }