Codeforces 798D 构造
来源:互联网 发布:mac应用程序图标大小 编辑:程序博客网 时间:2024/05/22 13:31
题意:给你两个序列 从中选出n/2+1个相同下标的数 使得两个序列的和 大于各自序列和的一半 题目保证有解
题解:先按A从大到小排序
如果n是奇数 就先把第一个选进去 然后两个两个的for 对于相邻的两个 选取B大的那个
然后就能保证a的和大于序列和的一半 因为a1>max(a2,a3) min(a2,a3)>max(a4,a5)...
b选的也是大的 所以也能保证
如果n是偶数 先这样做一次 然后把1或者2再扔进去即可
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<vector>using namespace std;struct node{int a,b,lab;bool operator <(const node& c)const{if(a==c.a)return b>c.b;return a>c.a;}}e[100005];vector<int>sp;int main(){ int n,i,j; scanf("%d",&n); for(i=1;i<=n;i++){ scanf("%d",&e[i].a); e[i].lab=i; } for(i=1;i<=n;i++)scanf("%d",&e[i].b); sort(e+1,e+1+n); if(n%2){ sp.push_back(e[1].lab); i=2; } else i=1;for(;i<=n;i+=2){ if(e[i].b<e[i+1].b)sp.push_back(e[i+1].lab); else sp.push_back(e[i].lab); } if(n%2==0){ if(sp[0]!=e[1].lab)sp.push_back(e[1].lab); else sp.push_back(e[2].lab); } printf("%d\n",sp.size()); for(i=0;i<sp.size();i++)printf("%d ",sp[i]); printf("\n"); return 0;}
0 0
- Codeforces 798D 构造
- Codeforces 798D Mike and distribution 构造
- 【构造】CodeForces 389D
- codeforces 655D (构造)
- Codeforces 550D 构造
- codeforces #306D Polygon 构造
- CodeForces 66D 数学构造
- codeforces GYM 101431D(构造)
- Codeforces 873D:构造题
- Codeforces 798D Mike and distribution (构造 + 脑洞 推荐)
- Codeforces 15D Map 单调队列+构造
- 【构造】 Codeforces 476D Dreamoon and Sets
- Codeforces 509D. Restoring Numbers 构造+数学
- Codeforces 538D Weird Chess 暴力、构造
- Codeforces 534D - Handshakes(构造,暴力)
- codeforces #550D Regular Bridge 构造
- Codeforces 550D Regular Bridge (构造)
- Codeforces 550D. Regular Bridge 构造
- HBase程序查询
- vue组件之间的传值
- QT 上建立一个小窗口
- 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活
- Android Draw 实现时钟
- Codeforces 798D 构造
- 第23节:Scala外部命令和正则表达式
- YAML部署实践
- TCP/IP详解--举例明白发送/接收缓冲区、滑动窗口协议之间的关系
- DAY10
- 【ZOJ 3962 Seven Segment Display】
- MYSQL性能查看(命中率,慢查询)
- 从系统中的到的原始日期转换成YYYY-MM-DD
- 前端_css