Asia Yokohama Regional Contest 2018 K题 - Sixth Sense(思维加贪心加二分)
https://codeforces.com/gym/102082
题意
两个人玩n轮游戏,每次两个人各取一个数,并且已知对手的取数顺序,如果你取的数比他大就算赢一轮,求能赢最多轮次的取法,如果有多种取法输出字典序最大的取法
题解
如果不规定字典序最大随意输出一种那我们可以排下序搞一搞就行了,但现在要保证字典序最大,怎么办呢?有经验的选手就知道,像保证什么最小的情况下求最大以及什么最大的情况求最小这种套路很有可能是二分。对本题来说,我们现在就是要保证当前取法满足条件的情况下字典序最大,我们贪心取当前数最大看后面是否满足,而且数越大后面越不容易满足,换句话说这种取数其实是单调的,所以我们可以二分来做。首先我们要先求出最大可以赢的轮次ans,然后从前往后扫一遍,看当前最多可以拿到多大的bi满足赢的轮次为ans。时间复杂度n^2。
1 #define IO std::ios::sync_with_stdio(0); 2 #include <bits/stdc++.h> 3 #define iter ::iterator 4 using namespace std; 5 typedef long long ll; 6 typedef pair<ll,ll>P; 7 #define pb push_back 8 #define se second 9 #define fi first 10 #define rs o*2+1 11 #define ls o*2 12 const int N=5e3+5; 13 vector<int>a,b,tmp; 14 int ans,n; 15 int check(int start,int v,vector<int>s){ 16 int res=(v>a[start]); 17 int flag=0; 18 int p=s.size()-1; 19 for(int i=start+1;i<n;i++){ 20 if(s[p]==v&&!flag){ 21 flag=1; 22 p--; 23 } 24 if(s[p]>a[i]){ 25 p--; 26 res++; 27 } 28 } 29 return res==ans; 30 } 31 int main(){ 32 scanf("%d",&n); 33 a.resize(n); 34 b.resize(n); 35 tmp.resize(n); 36 for(int i=0;i<n;i++){ 37 scanf("%d",&a[i]); 38 tmp[i]=a[i]; 39 } 40 for(int i=0;i<n;i++){ 41 scanf("%d",&b[i]); 42 } 43 sort(b.begin(),b.end()); 44 sort(a.begin(),a.end(),greater<int>()); 45 multiset<int>s; 46 for(int i=0;i<n;i++){ 47 s.insert(b[i]); 48 } 49 multiset<int>iter it; 50 for(int i=0;i<n;i++){ 51 it=--s.end(); 52 if(*it>a[i])ans++; 53 else it=s.begin(); 54 s.erase(it); 55 } 56 for(int i=0;i<n;i++){ 57 copy(tmp.begin(),tmp.end(),a.begin()); 58 sort(a.begin()+i+1,a.end(),greater<int>()); 59 int l=upper_bound(b.begin(),b.end(),a[i])-b.begin()-1; 60 int r=b.size()-1; 61 while(l<r){ 62 int m=l+(r-l+1)/2; 63 if(check(i,b[m],b))l=m; 64 else r=m-1; 65 } 66 if(check(i,b[r],b)){ 67 if(b[r]>a[i])ans--; 68 printf("%d ",b[r]); 69 b.erase(b.begin()+r); 70 } 71 else{ 72 int l=0,r=upper_bound(b.begin(),b.end(),a[i])-b.begin()-1; 73 while(l<r){ 74 int m=l+(r-l+1)/2; 75 if(check(i,b[m],b))l=m; 76 else r=m-1; 77 } 78 printf("%d ",b[r]); 79 b.erase(b.begin()+r); 80 } 81 } 82 printf("\n"); 83 }
转载于:https://www.cnblogs.com/ccsu-kid/p/10604817.html
Asia Yokohama Regional Contest 2018 K题 - Sixth Sense(思维加贪心加二分)相关推荐
- Asia Yokohama Regional Contest 2018 G题 What Goes Up Must Come Down(树状数组求逆序对)
https://codeforces.com/gym/102082 题意: 给一个数组大小不超过1e5,每个数的值也是1e5以内,可以交换相邻两个数,求保证它呈现一个非递减再非递增的趋势的最小交换次数 ...
- The 2018 ACM-ICPC Asia Qingdao Regional Contest
The 2018 ACM-ICPC Asia Qingdao Regional Contest 青岛总体来说只会3题 C #include<bits/stdc++.h> using nam ...
- 2018 ICPC Asia Jakarta Regional Contest
2018 ICPC Asia Jakarta Regional Contest 题号 题目 知识点 难度 A Edit Distance B Rotating Gear C Smart Thief D ...
- 2018 ACM-ICPC Asia Beijing Regional Contest题解
以下所有AC题解程序来自"仙客传奇"团队. A. Jin Yong's Wukong Ranking List AC的C++语言程序: #include <iostream& ...
- 2018-2019 ACM-ICPC, Asia Nanjing Regional Contest题解
以下所有AC题解程序来自"仙客传奇"团队. AC题数:6/13 ADGIJK A. Adrien and Austin AC的C++语言程序: #include <iostr ...
- The 2014 ACM-ICPC Asia Mudanjiang Regional Contest(2014牡丹江区域赛)
The 2014 ACM-ICPC Asia Mudanjiang Regional Contest 题目链接 没去现场.做的网络同步赛.感觉还能够,搞了6题 A:这是签到题,对于A堆除掉.假设没剩余 ...
- The 2019 ICPC Asia Shanghai Regional Contest
The 2019 ICPC Asia Shanghai Regional Contest 题号 题目 知识点 A Mr. Panda and Dominoes B Prefix Code C Maze ...
- 2018-2019 ACM-ICPC, Asia Jiaozuo Regional Contest题解
以下所有AC题解程序来自"仙客传奇"团队. A. Xu Xiake in Henan Province AC的C++语言程序: #include<iostream> # ...
- 2017-2018 ACM-ICPC, Asia Daejeon Regional Contest
2017-2018 ACM-ICPC, Asia Daejeon Regional Contest 题号 题目 难度 知识点 A Broadcast Stations B Connect3 C Gam ...
最新文章
- uniapp 鸿蒙,关于前端:uniapp项目安装运行操作手册
- 分析 AIX 和 Linux 性能工具nmon
- 学习计算机视觉你需要知道这关键的八点
- mongodb数据库磁盘碎片整理。
- 十九、I2C驱动及应用
- C#中的Using的用法
- python傅里叶函数图像_python实现傅里叶级数展开的实现
- 中国计算机学会第七届全国Web信息系统及其应用学术会议(WISA2010)征文通知
- fc oracle,fc9下oracle sqldeveloper安装日志
- 激战2:逐火之路-概念艺术设计
- 【Gym-100085 B】Binary Encoding【思维题】
- 520用Java制作一个表白app
- 苹果12隔空投送显示无法连接服务器,iOS设备隔空投送功能无法使用该如何解决...
- kubernets nodeport 无法访问
- linux添加菜单栏,Gnome desktop主菜单中添加自己的菜单栏
- Pytorch安装找不到指定的模块\torch\lib\asmjit.dll
- puppet server升级,puppet 常见错误解决
- 微信扫描二维码无法下载文件的解决办法
- C语言--数据溢出导致的缓冲区(堆栈)损坏
- SoapUI的一些基本设置