暨第三届上理程序设计竞赛赛后反思
给能动丢脸了,给能动丢脸了,给能动丢脸了。
签到题,我居然没做出来,原因是:没看到 $x+y\le n$这个条件,我枯了,导致怎么想也想不出来,答案就是$\min(m,\lfloor \frac{n+(m-1)\cdot y}{x} \rfloor)$,我菜死了。
签到题,C语言课后习题难度
签到题,C语言课后习题难度
并査集写成fa[x]==find(fa[x])了,我人傻了
另外,边权按照pair<max(x,y),min(x,y)>排序,我菜死了

赛时A掉了,不过是用的简单的模拟,也属于签到题范围吧


首先只需要判断最后两位数即可,按照00,20,12,32,40,24,44,52,60,16,36,64,56,72,76,80,28,84,48,68,88,92,96这样排列最后两位,选前面的数一定比选后面的数更优,因此只需要挨个判断有没有这些数就行了,除此之外,还需要特判 只含有0、只有一个4、只有一个8 的情况,细节比较多,我菜死了
code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
| int _,a[10]; int biao[23]={00,20,12,32,40,24,44,52,60,16,36,64,56,72,76,80,28,84,48,68,88,92,96};
inline void print(){ for(int i=9;i>=0;i--){ for(int j=1;j<=a[i];j++){ printf("%d",i); } } }
int main(){ for(scanf("%d",&_);_;_--){ int tot=0; rep(i,0,9){ read(a[i]); tot+=a[i]; } if(tot==0){ printf("-1"); continue; } if(tot>0&&tot==a[0]){ printf("0\n"); continue; } bool f=false; rep(i,0,22){ int t1=biao[i]/10,t2=biao[i]%10; if(t1==t2){ if(a[t1]>1){ f=true; a[t1]-=2; print(); printf("%d%d\n",t1,t2); break; } }else{ if(a[t1]&&a[t2]){ f=true; a[t1]--,a[t2]--; print(); printf("%d%d\n",t1,t2); break; } } } if(!f){ if(a[8]) printf("8\n"); else if(a[4]) printf("4\n"); else if(a[0]) printf("0\n"); else printf("-1\n"); } } return 0; }
|