Chocolate Bunny CodeForces - 1407C 思维
题意:
交互题
题目输入一个n,你需要输出一个满足要求的[1,n]的排列。
你可以最多询问2*n次来确定你要输出的排列·中每一个位置的值
每一次询问格式为“? a b”
它会回复你答案排列中第a个位置的元素取余于第b个位置的元素的值是多少
题解:
因为最后答案中每一个元素只会使用一次,那么你询问的va,vb肯定一个大一个小(v数组代表最后我们要输出的答案数组)
那么你用一个min(va,vb)%max(va,vb)==min(va,vb)
可以说两次询问可以确定一个元素的大小
那么就可以写代码了
代码:
int a[maxn];
void ask(int i,int j) {
cout << "?" << " " << i << " " << j << endl;
fflush(stdout);
}
int main() {
int n;cin >> n;
if(n == 1) {
cout << "! 1" << endl;
fflush(stdout);
exit(0);
}
int id = 0;
int x,y;
ask(1,2);
cin >> x;
ask(2,1);
cin >> y;
if(x > y) {
a[1] = x;
id = 1;
} else {
a[2] = y;
id = 2;
}
if(n == 2) {
if(id == 1) cout << "! " << a[1] << " " << (3 - a[1]) << endl;
else cout << "! " << (3 - a[2]) << " " << a[2] << endl;
fflush(stdout);
return 0;
}
if(id == 1) id = 2; else id = 1;
for(int i = 3;i <= n;++i) {
if(a[i] != 0) continue;
x = 0,y = 0;
ask(id,i);cin >> x;
ask(i,id);cin >> y;
if(x > y) {
a[id] = x;
id = i;
} else {
a[i] = y;
}
}
a[id] = n;
cout << "!";
for(int i = 1;i <= n;++i) {
cout << " " << a[i];
}
cout << endl;
fflush(stdout);
return 0;
}
Chocolate Bunny CodeForces - 1407C 思维的更多相关文章
- Codeforces Round #669 (Div. 2) C. Chocolate Bunny 题解(交互)
题目链接 题目大意 有一个长度为n的全排列,你可以询问2n次,要你经过这个2n次的询问后,求出这个全排列 询问定义为:输入"? i j"输出\(p_{i} mod p_{j}\) ...
- Codeforces Round #669 (Div. 2) C. Chocolate Bunny (交互,构造)
题意:有一个长度为\(n\)的隐藏序列,你最多可以询问\(2n\)次,每次可以询问\(i\)和\(j\)位置上\(p[i]\ mod\ p[j]\)的结果,询问的格式是\(?\ x\ y\),如果已经 ...
- Codeforces 424A (思维题)
Squats Time Limit: 1000MS Memory Limit: 262144KB 64bit IO Format: %I64d & %I64u Submit Statu ...
- Codeforces 1060E(思维+贡献法)
https://codeforces.com/contest/1060/problem/E 题意 给一颗树,在原始的图中假如两个点连向同一个点,这两个点之间就可以连一条边,定义两点之间的长度为两点之间 ...
- Queue CodeForces - 353D (思维dp)
https://codeforces.com/problemset/problem/353/D 大意:给定字符串, 每一秒, 若F在M的右侧, 则交换M与F, 求多少秒后F全在M左侧 $dp[i]$为 ...
- codeforces 1244C (思维 or 扩展欧几里得)
(点击此处查看原题) 题意分析 已知 n , p , w, d ,求x , y, z的值 ,他们的关系为: x + y + z = n x * w + y * d = p 思维法 当 y < w ...
- CodeForces - 417B (思维题)
Crash Time Limit: 1000MS Memory Limit: 262144KB 64bit IO Format: %I64d & %I64u Submit Status ...
- CodeForces - 417A(思维题)
Elimination Time Limit: 1000MS Memory Limit: 262144KB 64bit IO Format: %I64d & %I64u Submit ...
- CodeForces 625A 思维
题意是说一个人喝酒 有两种办法 买塑料瓶的 a块钱 喝了就没了 或者是买玻璃瓶的b块钱 喝完还能卖了瓶子c块钱 求最多能喝多少瓶 在开始判断一次 a与b-c的关系 即两种方式喝酒的成本 如果a< ...
随机推荐
- Linux下安装svn教程
前言 最近买了新服务器,准备开始弄一些个人的开源项目.有了服务器当然是搞一波svn啦.方便自己的资料上传和下载.于是在此记录搭建svn的方式,方便以后直接使用. 安装 使用yum源进行安装,十分的方便 ...
- 两万字长文总结,梳理 Java 入门进阶那些事
大家好,我是程序员小跃,一名在职场已经写了6年程序的老程序员,从一开始的菊厂 Android 开发到现在某游戏公司的Java后端架构,对Java还是相对了解的挺多. 大概是半年前吧,在知乎上有个知友私 ...
- 【ORA】ORA-01756: quoted string not properly terminated
出现ORA-01756: quoted string not properly terminated 后,查看SQL是否有中文符号 修改为英文的符号,运行正常
- python optparse模块的用法
引用原博主文章链接: https://www.cnblogs.com/darkpig/p/5717902.html
- 使用call、apply、bind继承及三者区别
js里的继承方法有很多,比如:使用原型链的组合继承.es6的Class.寄生继承以及使用call.apply.bind继承.再说继承之前,我们先简单了解下它们的区别. 一.区别: 同:三者都是改变函数 ...
- 登陆到 SAP 系统后的用户出口
增强类型:smod 增强名称:SUSR0001 组件(退出功能模块):EXIT_SAPLSUSF_001 功能:用户每次登陆SAP系统后都会调用这个SUSR0001增强,可以在FUNCTION EXI ...
- LVM 逻辑卷扩容
当lv空间不够用时,就需要我们对lv进行的扩容. 扩容分两种情况:(lv的有点,支持在线扩容) VG有充足的空间,可直接对LV进行扩容: VG空间不足,需要先对VG进行扩容,然后再对LV进行扩容 这里 ...
- 将汉字取模软件中的汉字放到keil5中显示
最近因为要使用STM32做毕业设计,需要用LCD显示中文,STM32开发板用的是原子的战舰STM32开发板,给的LCD显示例程里貌似没有中文显示,那么需要自己去编写中文显示程序. 软件编写对我来说并不 ...
- 01. struts2介绍
struts2优点 与Servlet API 耦合性低.无侵入式设计 提供了拦截器,利用拦截器可以进行AOP编程,实现如权限拦截等功能 支持多种表现层技术,如:JSP.freeMarker.veloc ...
- 转 Fiddler5 发送HTTP请求
Fiddler5 发送HTTP请求 文章转自:https://www.cnblogs.com/zhengna/p/10879573.html 1.Fiddler Composer发送HTTP请求 C ...