题意:n个物品,每个物品重量1/2^k[i],问可不可以分成两份,让这两份的总量都大于1/2

题解:因为两份都要大于1/2,那么我们两份都找出1/2,剩下的就无所谓了。我们把问题转化为,两份都需要找到一个1,因为 1/2==1/4+1/4,所以一个1等价于两个2,4个3.....,我们先从小到大排个序,令cnt1,cnt2表示这两组当前还需要pre这样的数的数量,如果cnt1+cnt2>后面剩余的数就直接break即可,cnt1和cnt2都为0时,即两组都已达到1/2,即符合条件

#include<bits/stdc++.h>
using namespace std;
int vis[100010];
struct node{int id;int x;
}a[100010];
int n;
int cmp(const node &xx,const node &yy)
{return xx.x<yy.x;
}
int main()
{int T;scanf("%d",&T);int nn=1;while(T--){scanf("%d",&n);for(int i=1;i<=n;i++){scanf("%d",&a[i].x);a[i].id=i;vis[i]=0;}printf("Case %d: ",nn++);sort(a+1,a+1+n,cmp);int flag=1;int pre=1;       //  pre初始为1,两组各需要一个即可 int cnt1=1,cnt2=1;for(int i=1;i<=n;i++){while(cnt1+cnt2<=n-i+1&&pre<a[i].x)  //  转化为当前这个数,更新需要的数的数量 {cnt1=cnt1*2;cnt2=cnt2*2;pre++;}if(cnt1+cnt2>n-i+1) // 剩余的数的数量无法满足 {flag=0;break;}if(cnt1){cnt1--;vis[a[i].id]=1;}else{cnt2--;}if(!cnt1 && !cnt2) break;  // 两个都满足了 }if(flag==0 || cnt1 || cnt2) puts("NO");else{puts("YES");for(int i=1;i<=n;i++){printf("%d",vis[i]);}printf("\n");}}return 0;
}

2018ccpc吉林 C:JUSTICE 思维相关推荐

  1. 2018ccpc吉林 C:JUSTICE

    妈耶,这个博客讲的好清晰 搜了好几个都是不怎么好理解的,直到我遇到了这个. 题意:n个物品,每个物品重量1/2^k[i],问可不可以分成两份,让这两份的总量都大于1/2 解: 要找两份都大于等于1/2 ...

  2. 2018CCPC吉林赛区 hdu6555~hdu6566

    2018CCPC吉林赛区(重现赛)- 感谢北华大学 A 基础数论. #include<bits/stdc++.h> using namespace std;typedef long lon ...

  3. 2018CCPC吉林赛区(重现赛)补题部分——F线段树待补

    A - The Fool 数论分块暴力求和 #define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #pragma GCC optim ...

  4. 2018CCPC吉林赛区 题解

    1001. The Fool 整除分块,签到 #include<bits/stdc++.h> #define ll long long using namespace std; const ...

  5. 2018CCPC吉林赛区 The Hermit

    //昨天在杭电上有了重现赛,组队打了一下,这个题没做出来,公式推的过程有点复杂,以后要多做做这种思维题,其实只要推出公式,代码就那么几行,放题~~~ http://acm.hdu.edu.cn/con ...

  6. 2018CCPC吉林总结

    文章目录 2018 CCPC 吉林 A 题意 分析 B 分析 C 题意 分析 D 题意 分析 E 题意 分析 F H Lovers 2018 CCPC 吉林 A 题意 求 ∑ i n ⌊ n i ⌋ ...

  7. 2018CCPC吉林赛区 | 部分题解 (HDU6555 HDU6556 HDU6559 HDU6561)

    // 杭电上的重现赛:http://acm.hdu.edu.cn/contests/contest_show.php?cid=867 // 杭电6555~6566可交题 A - The Fool 题目 ...

  8. ARC107——D - Number of Multisets

    D - Number of Multisets 之前写过一个类似表示的题(2018CCPC吉林赛区--C - Justice),也是让用12,14,18-\frac1 2 ,\frac 14,\fra ...

  9. HDU-6555-The Fool(整除分块)

    The Fool Problem Description The Fool is numbered 0 – the number of unlimited potential –and therefo ...

最新文章

  1. php中mysqli_query,在PHP中如何使用mysqli_query()函数
  2. 教你从0到1搭建秒杀系统-订单异步处理
  3. linux su无效_如何处理Linux中su命令无反应的情况
  4. akka2.5_发布Akka Toolkit 2.3
  5. 国外前端开发大神经验:目标越明确,计划就越专业,切记,不要撒网!
  6. 右手残疾学计算机学什么专业好,我是右手和右脚残疾 左手和左脚好的 可以学残疾人驾照吗...
  7. RPC(远程过程调用)原理及应用
  8. VC 2008 Express下安装OpenCV2.3.1
  9. 牛客 2022年中国高校计算机大赛-团队程序设计天梯赛(GPLT)上海理工大学校内选拔赛 签到题13题
  10. wxparse的使用php返回数组输出,小程序应用实践:wxParse多数据循环使用方法
  11. 安装 VS2010 中文旗舰版
  12. 阿里在线字体库超级简单又快捷的使用方法+Dcloud插件使用图标
  13. attributeerror: module 'numpy.random' has no attribute 'randon'
  14. 室内光缆与室外电力光缆特点简介
  15. TCP与UDP协议,socket套接字编程,通信相关操作
  16. python语音唤醒功能_百度语音识别 语音唤醒失败
  17. JS事件监听手机屏幕触摸事件 Touch
  18. redis客户端predis介绍
  19. Redhat防火墙端口设置
  20. 调用微信公众平台API免费给自己发消息

热门文章

  1. php 银联支付(快捷支付)
  2. MomentJs 常用api
  3. 测绘计算机编程心得体会,测绘心得体会
  4. mirai源代码c语言,Mirai源码解析
  5. CLOUDXNS 使用体验
  6. argc和argv的说明
  7. 某客户回滚段达到32765处理
  8. 小学6年级之圆锥体积公式
  9. IDEA上maven窗口上的图标都是什么意思
  10. botpress搭建智能问答机器人