Justice 结构体记录排序前下标
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 结构体记录排序前下标相关推荐
- PAT甲级1141 PAT Ranking of Institutions :[C++题解]结构体、排序、哈希表、结构体构造函数、结构体内写函数、排名
文章目录 题目分析 题目来源 题目分析 来源:acwing 分析:和下面这题是一道题: PAT甲级1137 Final Grading:[C++题解]结构体.排序.哈希表.结构体构造函数.结构体内写函 ...
- C语言 · 运用结构体的排序方法
AllSight C语言 · 运用结构体的排序方法 之前遇到排序只想着最原始的方法,诸如冒泡,选择,快速排序等等,刚刚跟大牛学会了结构体的方法来排序,这样的话以后再也不用怕成绩统计.名次排序之类的题目 ...
- BUAA(2021春)空闲空间合并(期末考试模拟题)——结构体二级排序
BUAA数据结构期末模拟题--空闲空间合并 看前须知 考试回顾 题目内容 问题描述 输入形式 输出形式 样例 样例说明 题解 思考和详解 参考代码 看前须知 要点介绍和简要声明. 考试回顾 格式控制输 ...
- C++结构体多级排序的三种方法
C++结构体多级排序的三种方法 struct node{int chinese,math;char name[15]; }; 需求:按数学成绩从大到小排序 1.自定义比较器 //自定义比较函数 bo ...
- C语言结构体自定义排序
结构体自定义排序: 在最基础的C语言中,排序较为简单的有三种:冒泡,选择,插入.其中选择最劣.复杂一点的有快速排序和归并排序,在这里后两种我就不介绍了. 在使用结构体排序的时候,里面可能有许多不同的对 ...
- C++中的结构体vector排序详解
C++中的结构体vector排序详解 使用sort函数对一个vector很常用,前提是通文件中必须包含#include ,但是针对结构体vector排序则需要进行一定的改动.具体事例如下所示: // ...
- PAT甲级1022 Digital Library (30分):[C++题解]结构体、排序、查询
文章目录 题目分析 题目链接 题目分析 分析: 一本书信息由6个,想到用结构体来存. 至于每一个信息可以用string来存,而关键字在想使用vector<string> keywords还 ...
- PAT甲级1012 (结构体,排序)
题目 To evaluate the performance of our first year CS majored students, we consider their grades of th ...
- c语言结构体函数排序,(为什么不能给分?)结构体数组插入排序的函数有关问题,...
当前位置:我的异常网» C语言 » (为什么不能给分?)结构体数组插入排序的函数有关 (为什么不能给分?)结构体数组插入排序的函数有关问题, www.myexceptions.net 网友分享于:2 ...
最新文章
- java 重用性_提高Java代码重用性的三个方法
- Java NIO(十五) Path 的用法
- linux下svn重新定位的方法
- php 表单错误弹窗,PHP表单错误
- 基于Boost::beast模块的同步WebSocket服务器
- c语言两个变量相乘出现乱码,C语言,矩阵的乘法运算程序,输出一堆乱码,求大神看看哪里错了。。...
- oracle ojvm generic,Oracle OJVM安全补丁
- 作者:郭鹏(1984-),男,博士,贵阳学院经济管理学院讲师。
- centos8 忘记root密码
- 信息学奥赛一本通C++语言——1008:计算(a+b)/c的值
- Python抽象类介绍
- AttachDispatch
- 计算机 图论基础知识,计算机基础知识
- System.IO.Path 操作
- mysql里的数据输入窗口是哪个_WINDOWS下使用Mysql 中碰到的问题记录
- isPrime()函数:判断素数,构造素数表
- python字典概述
- 第三章 国外信托公司业务
- 朗润外盘国际期货:Cosmos 终局
- 手把手带你撸一个校园APP(六):失物招领二手交易模块