博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
D. Divide
阅读量:4508 次
发布时间:2019-06-08

本文共 1705 字,大约阅读时间需要 5 分钟。

题目链接:

思路:用一个数组记录下每个二进制位上的值,满2进位,从高位到低位扫一遍,找到不能被均分的最高位(当前位为1而且不是进位获得的),该位置代表的值减去比它低位的值就是答案了

AC Code:

1 #include 
2 #include
3 #include
4 #define LL long long 5 const long M=110000; 6 LL pos[M],JinWei[M],ans[M],max_pos; 7 long n,t; 8 int main(){ 9 scanf("%d",&t);10 for (long l=1;l<=t;++l){11 scanf("%d",&n);12 13 memset(pos,0,sizeof(pos));14 memset(JinWei,0,sizeof(JinWei));15 max_pos=0;16 long max1=0;17 while (n--){18 long x,a;19 scanf("%d%d",&a,&x);20 pos[a]+=x;21 max1=std::max(max1,a);22 }23 24 for (long i=0;i
1){26 pos[i+1]+=(pos[i]>>1);27 JinWei[i+1]=1;28 pos[i]=pos[i]%2;29 }30 31 max_pos=-1;32 for (long i=M-1;i>=0;--i)33 if (pos[i] && !JinWei[i]){34 max_pos=i;35 break;36 }37 38 printf("Case #%d: ",l); 39 if (max_pos<0) printf("0\n");40 else{41 memset(ans,0,sizeof(ans));42 ans[max_pos]=1;43 for (long i=max_pos-1;i>=0;--i)44 if (pos[i]){45 ans[max_pos]=0;46 for (long j=max_pos-1;j>=i;--j)47 ans[j]=1;48 max_pos=i;49 }50 long output=0;51 for (long i=M-1;i>=0;--i){52 if (ans[i]) output=1;53 if (output) printf("%d",ans[i]);54 }55 printf("\n");56 }57 }58 return 0;59 }

By 王桢旭

转载于:https://www.cnblogs.com/scnuacm/p/3221286.html

你可能感兴趣的文章
子数组求和之大数溢出
查看>>
浏览器预览office文件(word,Excel,等)
查看>>
MySQL工具汇总
查看>>
cookie
查看>>
如何使用Eclipse编译C,C++,JAVA程序
查看>>
手把手教如何搭建node+egg项目 引入Sequelize
查看>>
Xcode 4 with External Static Library for iPhone Development
查看>>
linux——常用命令清单
查看>>
JS 20180415作业
查看>>
项目追求更高的性能,更高的并发,更高的可用 (1)
查看>>
安卓 okhttp小结
查看>>
cocos2d-x 关于无法找到gl/gl.h头文件错误,以及r.java无法生成解决办法
查看>>
Mysql创建自动生成时间列方法
查看>>
12171131第一次作业
查看>>
argparse
查看>>
Pandas使用to_csv保存中文数据用Excel打开是乱码
查看>>
超大整数计算模拟算法
查看>>
<USACO07JAN>解决问题Problem Solvingの思路
查看>>
docker学习
查看>>
C#3.0入门系列(六)-之OrderBy操作
查看>>