2018CCPC吉林C-JUSTICE(思维模拟)
2019-07-25 20:38
204 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_40534166/article/details/97297630
2018CCPC吉林C-JUSTICE(思维模拟)
题目链接:
链接:http://acm.hdu.edu.cn/showproblem.php?pid=6557
题意:给你n个数,能否分成两组,使每组的2的ki次方分之一的和大于等于二分之一,能的话输出分组方案
思路:不难发现, 例, 也就是2个k能合成一个k/2,
能不能分成两组,只需要看最后合完之后1的个数是不是大于等于2。
利用二进制的原理,优先队列+并查集,先取出权值最小的,进行合并,如果两个值相同,则可以合并成一个k-1,最后判断是否有两个或两个以上的1出现即可
另:优先队列默认的是数据大的优先级高.
AC代码:
#include <bits/stdc++.h> using namespace std; typedef long long LL; typedef unsigned long long ULL; const int prime = 999983; const int INF = 0x7FFFFFFF; const LL INFF =0x7FFFFFFFFFFFFFFF; const double pi = acos(-1.0); const double inf = 1e18; const double eps = 1e-6; const LL mod = 1e9 + 7; LL qpow(LL a,LL b) { LL s=1; while(b>0) { if(b&1)s=s*a%mod; a=a*a%mod; b>>=1; } return s; } typedef pair<int,int> P; const int maxn = 1e5+10; int a[maxn]; int F[maxn]; int Find(int x) { return x == F[x]?x:F[x] = Find(F[x]); } int main() { int T; cin>>T; int Case =0; while(T--) { int n; cin>>n; for(int i = 1; i <= n; ++i) F[i] = i; for(int i = 1; i <= n; ++i) scanf("%d",&a[i]); priority_queue<P>Q; for(int i = 1; i <= n; ++i) Q.push(P(a[i],i)); while(!Q.empty()&&Q.top().first > 1) { P p = Q.top(); Q.pop(); if(p.first != Q.top().first) { continue; } if(Q.empty()) break; P p2 = Q.top(); Q.pop(); int x = Find(p.second); int y = Find(p2.second); if(x < y) swap(x,y); F[x] = y; Q.push(P(p.first-1,y)); } printf("Case %d: ",++Case); if(Q.size() < 2) puts("NO"); else { puts("YES"); for(int i = 1; i <= n; ++i) { int x = Find(i); printf("%c",x == Q.top().second?'1':'0'); } puts(""); } } return 0; }
相关文章推荐
- 2018CCPC吉林赛区(重现赛)
- 【 2018南京 】Kangaroo Puzzle (思维+暴力模拟)
- Rich Game_模拟+思维+2018_3_18
- 【JZOJ5260】【GDOI2018模拟8.12】区间第k小
- HDU5961-搜索|模拟&思维&好题-A - 传递
- 【GDOI2018模拟7.9】组合数问题
- 【jzoj5219】【GDOI2018模拟7.10】【B】【动态规划】
- 2018CCPC网络赛 find interge(D)
- ccpc Secrete Master Plan(水模拟)
- Codeforces 770D Draw Brackets!【模拟+思维】
- CCF-NOIP-2018 提高组(复赛) 模拟试题(三)
- Codeforces 155D Colliders【思维+模拟】
- JS思维之路菜鸟也能有大能量(2)--模拟数组合并concat
- CodeForces - 876D Sorting the Coins 模拟+思维
- 【JZOJ 5241】【GDOI2018模拟8.8】苹果和雪梨
- 2016 CCPC Hangzhou Onsite A - ArcSoft's Office Rearrangement(HDU 5933) (贪心,模拟)
- 计蒜客2018省赛B组模拟五《G合并数字》
- 【清华冬令营2018模拟】送你一棵圣诞树
- JZOJ5603. 【NOI2018模拟3.27】Xjz
- (HDU 5929)Basic Data Structure 双端队列+模拟 <2016CCPC东北地区大学生程序设计竞赛 - 重现赛 >