Justice

解法:首先,对于大于等于100000的ki值,我们不需要管,如果这些数总和大于等于1,那么肯定有解,我们先判断这些数总和是否大于等于1,我们用数组vis统计每个数出现次数,然后从大到小枚举x,vis[x] += vis[x + 1] / 2,如果到了最后vis[0]不为0,那么满足条件,第二步我们来组合,我们取出所有值小于等于20的ki,把他们全部变成2^(20 - ki),然后从到达小枚举这些数,直到这些数相加等于2^(19)为止,然后把这些数标记为1,其他全部标为0即可。
--------------------- 
作者:一只叫橘子的猫 
来源:CSDN 
原文:https://blog.csdn.net/ccsu_cat/article/details/96307362 
版权声明:本文为博主原创文章,转载请附上博文链接!

!!!

1e5 / (2^21)是小于<1/2      所以 当总和大于1时,在1~20之间的数之和一定大于1/2  则只需要在(1~20)的数中找数并凑成1/2;

而且一定能 凑整 1/2  既然能大于等于1  则至少有可以凑成1/2或现存1/2;

排序后从小到大凑

#include<bits/stdc++.h>
using namespace std;
int a[100005],anss[100005],b[100005],ksm[21]={1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768,65536,131072,262144,524288,1048576};
struct node{int v,id;
}aa[100005];
bool cmp(node a,node b)
{return a.v<b.v;
}
int main()
{int t;cin>>t;for(int j=1;j<=t;j++){int k,sum=0,summ=0;memset(b,0,sizeof(b));scanf("%d",&k);for(int i=0;i<k;i++){scanf("%d",&a[i]);if(a[i]<=100000) b[a[i]]++;aa[i].v=a[i];aa[i].id=i;//标记原来下标 }for(int i=100000;i>0;i--){b[i-1]+=b[i]/2;}if(b[0]==0){printf("Case %d: NO",j);}else{sort(aa,aa+k,cmp);int sum=524288;printf("Case %d: YES\n",j);for(int qq=0;qq<k;qq++){if(aa[qq].v<=20){if(sum-ksm[20-aa[qq].v]>=0){sum-=ksm[20-aa[qq].v];anss[aa[qq].id]=1;}                   }}  for(int i=0;i<k;i++){if(a[i]<=20) printf("%d",anss[i]);else printf("0");anss[i]=0;//anss初始化 }} printf("\n");}
}

Justice 结构体记录排序前下标相关推荐

  1. PAT甲级1141 PAT Ranking of Institutions :[C++题解]结构体、排序、哈希表、结构体构造函数、结构体内写函数、排名

    文章目录 题目分析 题目来源 题目分析 来源:acwing 分析:和下面这题是一道题: PAT甲级1137 Final Grading:[C++题解]结构体.排序.哈希表.结构体构造函数.结构体内写函 ...

  2. C语言 · 运用结构体的排序方法

    AllSight C语言 · 运用结构体的排序方法 之前遇到排序只想着最原始的方法,诸如冒泡,选择,快速排序等等,刚刚跟大牛学会了结构体的方法来排序,这样的话以后再也不用怕成绩统计.名次排序之类的题目 ...

  3. BUAA(2021春)空闲空间合并(期末考试模拟题)——结构体二级排序

    BUAA数据结构期末模拟题--空闲空间合并 看前须知 考试回顾 题目内容 问题描述 输入形式 输出形式 样例 样例说明 题解 思考和详解 参考代码 看前须知 要点介绍和简要声明. 考试回顾 格式控制输 ...

  4. C++结构体多级排序的三种方法

    C++结构体多级排序的三种方法 struct node{int chinese,math;char name[15]; }; 需求:按数学成绩从大到小排序  1.自定义比较器 //自定义比较函数 bo ...

  5. C语言结构体自定义排序

    结构体自定义排序: 在最基础的C语言中,排序较为简单的有三种:冒泡,选择,插入.其中选择最劣.复杂一点的有快速排序和归并排序,在这里后两种我就不介绍了. 在使用结构体排序的时候,里面可能有许多不同的对 ...

  6. C++中的结构体vector排序详解

    C++中的结构体vector排序详解 使用sort函数对一个vector很常用,前提是通文件中必须包含#include ,但是针对结构体vector排序则需要进行一定的改动.具体事例如下所示: // ...

  7. PAT甲级1022 Digital Library (30分):[C++题解]结构体、排序、查询

    文章目录 题目分析 题目链接 题目分析 分析: 一本书信息由6个,想到用结构体来存. 至于每一个信息可以用string来存,而关键字在想使用vector<string> keywords还 ...

  8. PAT甲级1012 (结构体,排序)

    题目 To evaluate the performance of our first year CS majored students, we consider their grades of th ...

  9. c语言结构体函数排序,(为什么不能给分?)结构体数组插入排序的函数有关问题,...

    当前位置:我的异常网» C语言 » (为什么不能给分?)结构体数组插入排序的函数有关 (为什么不能给分?)结构体数组插入排序的函数有关问题, www.myexceptions.net  网友分享于:2 ...

最新文章

  1. java 重用性_提高Java代码重用性的三个方法
  2. Java NIO(十五) Path 的用法
  3. linux下svn重新定位的方法
  4. php 表单错误弹窗,PHP表单错误
  5. 基于Boost::beast模块的同步WebSocket服务器
  6. c语言两个变量相乘出现乱码,C语言,矩阵的乘法运算程序,输出一堆乱码,求大神看看哪里错了。。...
  7. oracle ojvm generic,Oracle OJVM安全补丁
  8. 作者:郭鹏(1984-),男,博士,贵阳学院经济管理学院讲师。
  9. centos8 忘记root密码
  10. 信息学奥赛一本通C++语言——1008:计算(a+b)/c的值
  11. Python抽象类介绍
  12. AttachDispatch
  13. 计算机 图论基础知识,计算机基础知识
  14. System.IO.Path 操作
  15. mysql里的数据输入窗口是哪个_WINDOWS下使用Mysql 中碰到的问题记录
  16. isPrime()函数:判断素数,构造素数表
  17. python字典概述
  18. 第三章 国外信托公司业务
  19. 朗润外盘国际期货:Cosmos 终局
  20. 手把手带你撸一个校园APP(六):失物招领二手交易模块

热门文章

  1. 仅需一个参数,开启微信小程序长按图片转发朋友,发送给朋友功能。小程序转发图片给朋友功能。
  2. chrome如何添加其他搜索引擎
  3. 文档编辑之markdown语法(typora)
  4. 欧洲为何没有牛逼的互联网公司?
  5. WIN10使用内置Check Point Capsule
  6. eva新世纪福音战士_盘点《新世纪福音战士》中的历代EVA机体!
  7. 所有业主注意,地库行车一定要谨慎!出了事故比地上难处理
  8. SpringCloud之Gateway
  9. 大型智慧校园系统源码 智慧校园源码 Android电子班牌源码
  10. 计算机考研自我介绍大概多少字,考研复试英语自我介绍多少字合适呢