【ACM ICPC 2011–2012, Northeastern European Regional Contest】Interactive Permutation Guessing【交互题】
题意:
答案是一个1-n的排列。现在你需要给出一个1-n的排列,系统返回两个排列之间相同的最长子序列长度【不连续】,需要在5*n^2的询问次数内求出来。
ps:longest common subsequence of permutations a and b【最长相同子序列,不需要连续】
思路:
猜排列,那么肯定涉及到定位置。确定每个数字所在的位置,首先本题返回的是最长相同子序列,不要求连续,因此我们只需要考虑数字之间的相对位置即可。如果选中排列中的一个数字,移动该数字,则其他数字的相对位置都不会变化,因此对答案的影响只有+1或者-1,由此我们可以对于1-n中的所有数字,枚举其所在的位置。
不断更换数字i在排列中的相对位置,如果答案+1,则证明当前的位置是数字i应该在的位置,如果答案始终-1或者不变,则说明该数字原来的位置就是正确的,因此在n^2次询问中即可确定答案。
代码:
#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
#define rep(i,a,b) for(int i = a; i <= b; i++)
using namespace std;int n;
int pos[50];int output()
{rep(i,1,n){cout << pos[i];if(i == n) cout << endl;else cout << " ";}int hp;cin >> hp;return hp;
}int find(int x)
{rep(i,1,n)if(pos[i] == x) return i;
}void change(int x, int y) //将pos[x]移到pos[y]
{if(x < y){int hp = pos[x];rep(i,x,y-1){pos[i] = pos[i+1];} pos[y] = hp;}else if(x > y){int hp = pos[x];for(int i = x; i >= y+1; i--){pos[i] = pos[i-1];} pos[y] = hp; }
}void solve()
{int base = output();rep(i,1,n){int hp = find(i); //初始位置int gn = hp;int jud = 0;rep(j,1,n){if(j == gn) continue;change(hp,j);hp = j;int tmp = output();if(tmp == n) return;if(tmp == base+1){jud = 1;break;}}if(!jud) change(hp,gn);else base++; }
}int main()
{cin >> n;rep(i,1,n)pos[i] = i;solve();return 0;
}
【ACM ICPC 2011–2012, Northeastern European Regional Contest】Interactive Permutation Guessing【交互题】相关推荐
- ACM ICPC 2011-2012 Northeastern European Regional Contest(NEERC)A ASCII Area
A: 给你一个矩阵求'/' 和 '\' 围成的图形,简单签到题,有一些细节要考虑. 题解:一行一行的跑,遇到'/'和'\' 就加0.5, 在面积里面的'.' 就加1.用一个flag来判断是否在围住的图 ...
- ACM ICPC 2011-2012 Northeastern European Regional Contest(NEERC)G GCD Guessing Game
G: 要你去才Paul的年龄,Paul的年龄在1~n之间,你每猜一个Paul会告诉你,你猜的这个数和他年龄的gcd,问在最坏情况下最少要猜多少次. 题解: 什么是最坏情况,我们直到如果他的年龄是1的话 ...
- ACM ICPC 2011-2012 Northeastern European Regional Contest(NEERC)B Binary Encoding
B: 现在有一种新的2进制表示法,要你求出0~m-1的每个数的表示. 规则如下:n 是满足 m<=2n 最小数. 而0~m-1的数只能够用n-1个位和n个位来表示. 对于n个位表示的数来说不能有 ...
- 2015-2016 ACM-ICPC Northeastern European Regional Contest (NEERC 15)
NEERC 15 题解1 题解2 官方题解 转载于:https://www.cnblogs.com/NEVERSTOPAC/p/5682661.html
- 2002-2003 ACM-ICPC Northeastern European Regional Contest (NEERC 02)
B Bricks 计算几何乱搞 题意: 给你个立方体,问你能不能放进一个管道里面. 题解: 这是一道非常迷的题,其问题在于,你可以不正着放下去,你需要斜着放.此时你需要枚举你旋转的角度,来判断是否可行 ...
- 2002-2003 ACM-ICPC Northeastern European Regional Contest (NEERC 02) A Amusing Numbers (数学)
其实挺简单的.先直接算出之前已经排在k这个数前面的数字.比如543是三位的,那么100~543都是可以的,两位的10~54. 如果还需要往前面补的话,那么依次考虑1000~5430,5430是上界不能 ...
- 2016-2017 ACM-ICPC Northeastern European Regional Contest (NEERC 16)
A:模拟 注意各种情况和细节~ 1 #include<cstdio> 2 #include<string> 3 #include<cstdlib> 4 #inclu ...
- 2021 ICPC Southeastern Europe Regional Contest(更新至六题)
2021 ICPC Southeastern Europe Regional Contest A题签到 A. King of String Comparison 题意:给两个字符串,找出有多少对(l, ...
- ICPC North Western European Regional Contest 2019 E. Expeditious Cubing(浮点数处理)
题目链接 思路:先将前四次时间按照升序排序. 后三次时间的和如果小于给出的标准3,那么就inf,如果前三次的和大于标准时间 3那么就impossible,第三种情况就是,用标准时间 * 3 - 第二长 ...
- 2017-2018 Northwestern European Regional Contest (NWERC 2017)
Rank Solved A B C D E F G H I J K --/-- 6/11 . O Ø O Ø Ø O O O . O O: 当场通过 Ø: 赛后通过 .: 尚未通过 A Ascendi ...
最新文章
- 19个人工智能(AI)热门应用领域,你知道多少?
- Oracle PL/SQL编程之过程
- SQL Server修改表结构后批量更新所有视图
- 图论 Make Unique:有向图和无向图的一些算法
- Android Studio 2.3 Canary 3 版本发布
- 【莫比乌斯反演】10.30破译密码
- Vue之实例的生命周期
- Red5 修改RTMP监听端口和ip
- php计算结果排序,php-按从数组计算出的值对数组进行排序
- Oracle基础知识-SQL简单命令
- linux 访问文件软件,Linux下访问文件的基本模式
- 编程中什么叫做元素什么叫帧_R编程中的数据帧
- java中random方法取值范围_java中最值的求法,你可能忽略了这种方法了!
- RPLIDAR的坐标系问题
- 一个div实现太极图案+动画(简单易懂)
- 诛仙服务器状态查询,《诛仙3》部分服务器数据互通公告
- oracle 根据符号分列,oracle 树结构数据层次分列显示
- 靠谱的录屏软件 + mp4格式转换软件
- ECCV 2022 | 适用于分类,检测,分割的生成式知识蒸馏开源
- IDA动态调试两种方式
热门文章
- 备课好帮手,免费分享 下载
- 投身管理工作(项目经理修炼手册正文的开头)
- 如何解决xp进系统的时候需要按enter键
- hdu 1213 “How Many Tables”(并查集基本到优化)
- ABC + DEF = GHI //递归思想的充分体现(重难点)
- 小米6 twrp_小米手机刷国际版欧版 MIUI 的详细教程
- python批量添加水印_手把手教你用Python批量给图片添加水印!知了干货分享!
- python 知乎接口_ZhihuVAPI 是一个可以让你以一种优雅的形式调用知乎数据的 Python 包....
- 云服务器远程连接的设置方法、安全组设置(外网可访问)
- nyoj20吝啬得过度(DFS)