7.12
错过。。。
7.14
https://vjudge.net/contest/170300#overview
D - Reading Digits
暴力往前推到初始时的串,输出指定位置即可。
1 #include <cstdio> 2 #include <bits/stdc++.h> 3 using namespace std; 4 5 int main() 6 { 7 string s,t; 8 int n,k; 9 scanf("%d%d",&n,&k); 10 cin>>s; 11 for(int i=0;i<n;i++) 12 { 13 int len=s.length(); 14 t=""; 15 for(int j=0;j<len;j++) 16 { 17 int a=s[j]-'0'; 18 int k=0; 19 while(k<a) t+=s[j+1],k++; 20 j++; 21 } 22 s=t; 23 } 24 cout<<s[k]<<endl; 25 }
G - Pokemons
没有想到在线直接处理,一直爆内存。。。怎么那么弱啊
1 #include <cstdio> 2 #include <bits/stdc++.h> 3 using namespace std; 4 double m; 5 int n; 6 7 int main() 8 { 9 scanf("%lf%d",&m,&n); 10 double minp,curp; 11 double ans=0; 12 scanf("%lf",&minp); 13 for(int i=1;i<n;i++) 14 { 15 scanf("%lf",&curp); 16 if(i==1) 17 { 18 ans=(curp-minp)/minp*m; 19 } 20 if(curp<minp) minp=curp; //维护当前最小进价 21 else ans=max(ans,(curp-minp)/minp*m); //当前最大收益 22 } 23 printf("%.2lf ",ans); 24 }
I - Cubes
dfs+剪枝
1 #include <cstdio> 2 #include <bits/stdc++.h> 3 using namespace std; 4 5 int n; 6 int c[410]; 7 int ans[50],a[50],cnt=50;//预估不会超过50层?? 8 void dfs(int d,int n,int k) 9 { 10 if(n==0) 11 { 12 cnt=d; 13 for(int i=1;i<=cnt;i++) a[i]=ans[i]; 14 } 15 if(d+1>=cnt||d+n/c[k]>=cnt) return ; 16 for(int j=k;j>=1;j--) if(c[j]<=n) 17 { 18 ans[d+1]=j; 19 dfs(d+1,n-c[j],j); 20 } 21 } 22 int main() 23 { 24 scanf("%d",&n); 25 for(int i=1;i<=400;i++) c[i]=i*i*i; 26 dfs(0,n,400); 27 printf("%d ",cnt); 28 for(int i=1;i<cnt;i++) printf("%d ",a[i]); 29 printf("%d ",a[cnt]); 30 }
7.16
https://vjudge.net/contest/171164#overview
A - Rearranging a Sequence
看到先进后出就用栈做了
1 #include <cstdio> 2 #include <bits/stdc++.h> 3 using namespace std; 4 5 int n,m; 6 stack <int> s; 7 int vis[200010]; 8 int main() 9 { 10 scanf("%d%d",&n,&m); 11 int cnt=0; 12 for(int i=0;i<m;i++) 13 { 14 int x; 15 scanf("%d",&x); 16 s.push(x); 17 if(!vis[x]) 18 { 19 vis[x]=1; 20 cnt++; 21 } 22 } 23 for(int i=0;i<cnt;i++) 24 { 25 while(vis[s.top()]==2) s.pop(); 26 printf("%d ",s.top()); 27 vis[s.top()]=2; 28 s.pop(); 29 } 30 for(int i=1;i<=n;i++) 31 if(!vis[i]) printf("%d ",i); 32 }
B - Quality of Check Digits
没有什么比读错题更坑了,,还是两次读错
题目中没有说只有主对角线有0,但是给的例子都是只有主对角线是0(最后一个忽略),导致判断时出错一直WA在31
代码写的比较丑,凑和吧=_=||
1 #include <cstdio> 2 #include <bits/stdc++.h> 3 using namespace std; 4 const int maxn=10010; 5 int tb2[10][10]; 6 7 int e[maxn]; 8 9 int main() 10 { 11 for(int i=0;i<10;i++) 12 for(int j=0;j<10;j++) 13 scanf("%d",&tb2[i][j]); 14 for(int i=0;i<10000;i++) 15 { 16 int a=i/1000; 17 int b=i%1000/100; 18 int c=i%100/10; 19 int d=i%10; 20 int x=tb2[0][a]; 21 int y=tb2[x][b]; 22 x=tb2[y][c]; 23 y=tb2[x][d]; 24 e[i]=y; 25 } 26 int cnt=0; 27 for(int i=0;i<10000;i++) 28 { 29 int flag=0; 30 int a=i/1000; 31 int b=i%1000/100; 32 int c=i%100/10; 33 int d= i%10; 34 for(int j=0;j<10&&!flag;j++) if(j!=e[i]) 35 { 36 if(tb2[e[i]][j]==0) 37 { 38 cnt++; 39 flag=1; 40 break; 41 } 42 } 43 for(int j=0;j<10&&!flag;j++) if(j!=a) 44 { 45 int x=j*1000+b*100+c*10+d; 46 if(tb2[e[x]][e[i]]==0) 47 { 48 cnt++; 49 flag=1; 50 break; 51 } 52 } 53 for(int j=0;j<10&&!flag;j++) if(j!=b) 54 { 55 int x=j*100+a*1000+c*10+d; 56 if(tb2[e[x]][e[i]]==0) 57 { 58 cnt++; 59 flag=1; 60 break; 61 } 62 } 63 for(int j=0;j<10&&!flag;j++) if(j!=c) 64 { 65 int x=j*10+a*1000+b*100+d; 66 if(tb2[e[x]][e[i]]==0) 67 { 68 cnt++; 69 flag=1; 70 break; 71 } 72 } 73 for(int j=0;j<10&&!flag;j++) if(j!=d) 74 { 75 int x=j+a*1000+b*100+c*10; 76 if(tb2[e[x]][e[i]]==0) 77 { 78 cnt++; 79 flag=1; 80 break; 81 } 82 } 83 if(flag) continue; 84 85 int x=b*1000+a*100+c*10+d; 86 if(a!=b&&tb2[e[x]][e[i]]==0) 87 { 88 cnt++; 89 flag=1; 90 continue; 91 } 92 93 x=a*1000+c*100+b*10+d; 94 if(c!=b&&tb2[e[x]][e[i]]==0) 95 { 96 cnt++; 97 flag=1; 98 continue; 99 } 100 x=a*1000+b*100+c+d*10; 101 if(c!=d&&tb2[e[x]][e[i]]==0) 102 { 103 cnt++; 104 flag=1; 105 continue; 106 } 107 x=a*1000+b*100+c*10+e[i]; 108 if(d!=e[i]&&tb2[e[x]][d]==0) 109 { 110 cnt++; 111 flag=1; 112 continue; 113 } 114 } 115 cout<<cnt<<endl; 116 }
C - Distribution Center
并没有做出来。。。差一点
要记录一下每次机械臂操作后两条生产线的物品总数,上交和下交分开记录,下次交汇时更新用到。
1 #include <cstdio> 2 #include <bits/stdc++.h> 3 using namespace std; 4 5 const int maxn=200010; 6 int last[maxn][2]; //0为上交,1为下交 7 int ans[maxn]; 8 9 struct node 10 { 11 int x,y; 12 bool operator <(const node & a)const 13 { 14 return x<a.x; 15 } 16 }arm[maxn]; 17 int n,m; 18 19 int main() 20 { 21 scanf("%d%d",&n,&m); 22 for(int i=0;i<m;i++) 23 scanf("%d%d",&arm[i].x,&arm[i].y); 24 sort(arm,arm+m); 25 for(int i=0;i<=n;i++) ans[i]=1; 26 for(int i=0;i<m;i++) 27 { 28 int a=arm[i].y; 29 int b=a+1; 30 int dx=ans[a]-last[a][1];// 31 int dy=ans[b]-last[b][0];// 32 ans[a]+=dy; 33 ans[b]+=dx; 34 last[a][1]=ans[a]; 35 last[b][0]=ans[b]; 36 } 37 for(int i=1;i<=n;i++) 38 printf("%d%c",ans[i],i==n?' ':' '); 39 }
7.18
https://vjudge.net/contest/171646#overview
C - Sums
等号右边用求和公式,枚举个数n求得a1
1 #include <cstdio> 2 #include <bits/stdc++.h> 3 using namespace std; 4 int main() 5 { 6 int t; 7 scanf("%d",&t); 8 while(t--) 9 { 10 int n; 11 int ok=0; 12 scanf("%d",&n); 13 for(int i=2;i<=100000&&(n-(i-1)*i/2)>0;i++) 14 { 15 long long temp=(n-(i-1)*i/2); 16 if(temp%i) continue; 17 ok=1; 18 int a1=temp/i; 19 printf("%d = %d",n,a1); 20 for(int j=1;j<i;j++) 21 { 22 printf(" + %d",++a1); 23 } 24 puts(""); 25 break; 26 27 } 28 if(!ok) puts("IMPOSSIBLE"); 29 } 30 }
D - Wheels
写的有点拉杂,,就这样吧。。。
1 #include <cstdio> 2 #include <bits/stdc++.h> 3 #define LL long long 4 using namespace std; 5 const int maxn=1010; 6 int n; 7 struct node 8 { 9 int x,y,r; 10 int id; 11 }clo[maxn]; 12 int vis[maxn]; 13 queue<node> q[2]; 14 int gcd(int a,int b) 15 { 16 return b==0?a:gcd(b,a%b); 17 } 18 19 double dis(node a,node b) 20 { 21 int dx=a.x-b.x; 22 int dy=a.y-b.y; 23 return sqrt(dx*dx+dy*dy); 24 } 25 void bfs() 26 { 27 q[0].push(clo[0]); 28 clo[0].id=0; 29 vis[0]=1; 30 int mask=0; 31 while(!q[mask].empty()) 32 { 33 node temp=q[mask].front(); 34 q[mask].pop(); 35 for(int i=0;i<n;i++) if(!vis[i]) 36 { 37 double d1=dis(temp,clo[i]); 38 if(d1==temp.r+clo[i].r) 39 { 40 vis[i]=1; 41 clo[i].id=mask^1; 42 q[mask^1].push(clo[i]); 43 } 44 } 45 if(q[mask].empty()) mask^=1; 46 } 47 return ; 48 } 49 int main() 50 { 51 int t; 52 scanf("%d",&t); 53 54 while(t--) 55 { 56 while(!q[0].empty()) q[0].pop(); 57 while(!q[1].empty()) q[1].pop(); 58 memset(vis,0,sizeof(vis)); 59 scanf("%d",&n); 60 for(int i=0;i<n;i++) 61 { 62 scanf("%d%d%d",&clo[i].x,&clo[i].y,&clo[i].r); 63 clo[i].id=2; 64 } 65 int r=clo[0].r; 66 bfs(); 67 for(int i=0;i<n;i++) 68 { 69 if(clo[i].id==0) 70 { 71 int g=gcd(r,clo[i].r); 72 if(r%clo[i].r) printf("%d/%d clockwise ",r/g,clo[i].r/g); 73 else printf("%d clockwise ",r/clo[i].r); 74 } 75 else if(clo[i].id==2) 76 { 77 printf("not moving "); 78 } 79 else if(clo[i].id==1) 80 { 81 int g=gcd(r,clo[i].r); 82 if(r%clo[i].r) printf("%d/%d counterclockwise ",r/g,clo[i].r/g); 83 else printf("%d counterclockwise ",r/clo[i].r); 84 } 85 } 86 } 87 }
H - Good morning!
蒟蒻写表过的=_=||......................................................
1 #include <bits/stdc++.h> 2 #include <cstdio> 3 using namespace std; 4 int ans[10][10]={ 5 0,0,0,0,0,0,10,10,10,10, 6 10,11,12,13,14,15,16,17,18,19, 7 20,20,22,23,25,25,26,28,28,29, 8 29,29,33,33,33,36,36,36,39,39, 9 40,40,44,44,44,45,46,47,48,49, 10 50,50,50,55,55,55,56,56,58,59, 11 59,59,59,66,66,66,66,66,69,69, 12 70,70,70,70,77,77,77,77,78,79, 13 80,80,80,80,88,88,88,88,88,89, 14 89,89,89,89,89,99,99,99,99,99, 15 }; 16 17 int main() 18 { 19 20 int t; 21 scanf("%d",&t); 22 while(t--) 23 { 24 char s[5]; 25 cin>>s; 26 int len=strlen(s); 27 if(len==1) 28 { 29 cout<<s<<endl; 30 continue; 31 } 32 int a=s[len-1]-'0'; 33 int b=s[len-2]-'0'; 34 s[len-2]='