Chocolate Bunny CodeForces - 1407C 思维
2024-09-03 02:59:33
题意:
交互题
题目输入一个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;
}
最新文章
- MongoDB安装使用
- EditText的hint不显示
- samtools常用命令详解(转)
- PMP项目管理笔记 项目定义
- Socket通信(转)
- windows服务与桌面交互
- 关于overflow-y:scroll ios设备不流畅的问题
- Pgsql 里面 COALESCE的用法
- js监控键盘大小写事件
- 【转】Linux下tar.xz结尾的文件的解压方法
- css Tab选项卡1
- C#winform自定义控件模拟设计时界面鼠标移动和调节大小、选中效果
- 下载、安装 SQL server 2012,一步一步教你安装、激活sql server2012数据库 ,附有数据库安装包
- 《SQL 基础教程》第二章:查询基础
- immutable-styles 基本试用
- centos7 Apache 2.4.6 多域名多网站配置
- 腾讯游戏设计(tgideas.qq.com)回复处CSRF任意换马甲
- 修改XML的节点内容
- 使用TCP在同一台电脑上可以建立连接,在两台电脑上却连接失败的原因分析
- CentOS6下docker的安装和使用