原题链接:B:Godsend

大意:
一串数列。A,B 轮流取一些数字。 A 先走,每次从中抽取和为奇数的串,(抽完后自动缩为一个新串)。B 每次从中取和为偶数的串。最后一个无法操作的人输。

思路:
博弈论水题。若和为奇数,那么 A 赢,若和为偶数, A 一开始若能从中抽走奇数,那么 B 输,否则 A 输。
比赛时hack看到的代码写法实在太多了。

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define mem(s,t) memset(s,t,sizeof(s))
//#define D(v) cout<<#v<<" "<<v<<endl
#define inf 0x3f3f3f3f
#define pb push_back
//#define LOCAL
inline void read(int &x){x=0;char p=getchar();while(!(p<='9'&&p>='0'))p=getchar();while(p<='9'&&p>='0')x*=10,x+=p-48,p=getchar();
}
int a[1000];
const int mod=1e9+7;
int main() {int ans=0,f=0;int n;cin>>n;for(int i=0;i<n;i++){int x;cin>>x;if(x&1) f=1;ans+=(x%2);}if(ans&1) puts("First");else if(ans%2==0 && f) puts("First");else puts("Second");return 0;
}

C.Leha and Function

大意:
题目包装得很多。对于一个数列,F(n,k)F(n,k) 表示数列中的第 {1,2,3,…n} 个数中选取 k 个数,k 个数中最小数的数学期望。
现在给出两个数列,A,B ,即为上述数列,B 为 k 的集合。
现在求 最大。
看了一下样例是倒序匹配,实际上贪心地想想也是对的。
逆序和大于等于乱序和大于等于顺序和

写法一:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define mem(s,t) memset(s,t,sizeof(s))
#define D(v) cout<<#v<<" "<<v<<endl
#define inf 0x3f3f3f3f
#define pb push_back
//#define LOCAL
inline void read(int &x){x=0;char p=getchar();while(!(p<='9'&&p>='0'))p=getchar();while(p<='9'&&p>='0')x*=10,x+=p-48,p=getchar();
}
int a[200005],b[200005],c[200005];
int main() {int m;read(m);for(int i=0;i<m;i++) read(a[i]);for(int i=0;i<m;i++){read(b[i]);c[i]=b[i];}sort(a,a+m,[&](int x,int y){return x>y;});sort(b,b+m);for(int i=0;i<m;i++) printf("%d%c",a[lower_bound(b,b+m,c[i])-b]," \n"[i==m-1]),b[lower_bound(b,b+m,c[i])-b]--;//找到位置,然后这个位置的bi--,防止影响下次查找return 0;
}

写法二:pair

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define mem(s,t) memset(s,t,sizeof(s))
#define D(v) cout<<#v<<" "<<v<<endl
#define inf 0x3f3f3f3f
#define pb push_back
//#define LOCAL
inline void read(int &x){x=0;char p=getchar();while(!(p<='9'&&p>='0'))p=getchar();while(p<='9'&&p>='0')x*=10,x+=p-48,p=getchar();
}
int a[200005],b[200005],c[200005];
pair<int,int> ans[200005];
int main() {int m;read(m);mem(ans,0);for(int i=0;i<m;i++) read(a[i]);for(int i=0;i<m;i++){read(b[i]);ans[i]={b[i],i};}sort(a,a+m,greater<int>());sort(ans,ans+m);for(int i=0;i<m;i++){int to=ans[i].second;c[to]=a[i];}for(int i=0;i<m;i++) printf("%d%c",c[i]," \n"[i==m-1]);return 0;
}

顺便复习下pair,二维偏序,排序时先排一维,一维相同时再比较二维。

ps.最近学到了一些c++11的技巧,编译需要编译器支持。

codeforces Div.2 #429 B.Godsend C. Leha and Function相关推荐

  1. Codeforces Round #429 (Div. 2):B. Godsend

    题目: Leha somehow found an array consisting of n integers. Looking at it, he came up with a task. Two ...

  2. CodeForces 841C (C) Leha and Function 贪心

    题意 定义F(n,k)F(n,k)表示1-n的数列中以k为子集总个数的最小值 现有A,B数组 让我们重新排列A 使得sigma[1 len]F(ai,bi)sigma[1 ~ len]F(ai,bi) ...

  3. Codeforces div.2 ICPC M - Moving Both Hands

    题意:给定一个有向图,求1-(2~n)的点的距离,如果走不到则输出-1 思路:由于两个点必定在某一点汇合,其间终点走沿着路径的反向边,因此,我们建一个分层图,两个层之间的顶点对应连长度为0的边,其中一 ...

  4. cf 429 B. Godsend

    昨晚的cf测试B问题.在做题的时候看到题目首先想到的是用线段树解决,建完树之后发现懵逼了,接下来怎么办啊 .....然后就没有然后了,放弃了这题去做后面的题目了.今天起床后有想了下这题,真是被自己蠢哭 ...

  5. Codeforces div.2 D. Slime Escape

    题意:你是一个slime,现有一列数,表示i位置上有一个血量为ai的slime,你需要吃掉一些slime以到达0,或n+1的位置,回答是否可以到达 思路:贪心前缀和预处理模拟,预处理出左右可以扩展的区 ...

  6. codeforces Round#429 (Div2)

    2017-08-20 10:00:37 writer:pprp 用头文件#include <bits/stdc++.h>很方便 A. Generous Kefa codeforces 84 ...

  7. Codeforces Round #245 (Div. 1) E. Points and Segments 欧拉回路 + 建模

    传送门 文章目录 题意: 思路: 题意: 思路: 考虑对于线段,如何建模. 我们考虑先将线段转换成左闭右开的形式,将左右点连起来. 再考虑每个点,将所有离散化后的点拿出来,每个点都有一个度,现在问题就 ...

  8. Codeforces 题目合集+分类+代码 【Updating...】【361 in total】

    961A - Tetris                                                模拟                                      ...

  9. JS获取div滚动条距离实现弹出标签位置动态移动

    前些天尝试了一个定位弹出div标签的功能,没有滚动条时用的是绝对位置,有滚动条后就必须在绝对位置XY坐标上减去滚动条吃进的距离,否则定位就不准了. 下面是获取div滚动条距离的JS脚本: <SC ...

最新文章

  1. ASP.net(C#)批量上传图片(完整版)
  2. The Pediatric Cancer Genome Project   儿童癌症基因组计划
  3. 【Ubuntu】ubuntu webqq桌面版pywebqq
  4. TensorFlow2简单入门 - 池化层
  5. PHP的引用传值值传递
  6. 数码管显示1到8c语言,单片机控制八只数码管滚动显示1~8 附PROTEUS软件仿真图
  7. [Luogu 1351] NOIP2014 联合权值
  8. 指令系统——数据寻址(2)(详解)
  9. 升级浏览器_微软IE11浏览器 最后的升级机会
  10. 苹果企业账号炒作到多少钱_从炒作到行动:边缘计算的后续步骤
  11. 黑马程序员传智播客迭代器和循环生成fibonacci数列
  12. 凸优化学习笔记(一):仿射集、凸集、锥
  13. 软件设计师中级考试经验总结
  14. OpenGL着色器程序解析--初识着色器
  15. 如何将手机里的PDF文件转换成Word文档
  16. 最新价值800元的720全景云系统源码 可生成小程序带PC端 附新手搭建教程
  17. 计算机右键括号内的字母,电脑操作中菜单后面括号里的字母的介绍
  18. 使用JSONObject比较Java复杂对象
  19. matlab一阶导数图,一阶微分excel【如何用EXCEL做一阶导数图?】
  20. [Back-To-Back LC]背对背信用证

热门文章

  1. python画星空的程序_python画画梵高
  2. 使用mysql的mycli插件
  3. WooCommerce入门指南:添加新订单第1部分
  4. 三相桥式全控整流电路matlab仿真,基于Matlab的三相桥式全控整流电路的仿真研究...
  5. 将matlab的m文件转成C语言
  6. 卸载Axmath 后,word加载项中还是有 Axmath 的解决方法
  7. 如何制作室内地图,如何快速建立室内地图
  8. python使用openpyxl库按 行/列 合并/拆分 Excel表格
  9. java 打印异常内容_java自定义异常打印内容详解
  10. java查询所有数据_elasticsearch查询所有数据restful api以及java代码实现