翻牌游戏

有N张写有数据的牌, 从上到下放成一堆,每次从上面取一张输出,再从上面取一张放回这堆牌的下面。重复这个过程,直到取完,发现取出牌上的数字恰巧是1,2,3...,N,问原先N张牌上的数是什么?

输入格式
第一行1个正整数:N,范围在[1,10000]。

输出格式
第一行1个正整数:N,范围在[1,10000]。

输入/输出例子1
输入:

4

输出:

1 3 2 4


设原来的牌:a1,a2,a3,a4
输出的牌: a1,a3,a2,a4 (即1,2,3,4)
问题变成了:知道输出序列,按照下标排序求输入序列
->离散化


#include<bits/stdc++.h>
using namespace std;
struct st{
int v,id;
};
queue<st> q1;
vector<st> q2;
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
q1.push({0,i});
}
int k=1;
while(!q1.empty()){
st f=q1.front();
f.v=k++;
q2.push_back(f);
q1.pop();
if(!q1.empty()){
st f2=q1.front();
q1.pop();
q1.push(f2);
}
}
sort(q2.begin(),q2.end(),[](st x,st y)->bool{
return x.id<y.id;
});
for(st e:q2){
cout<<e.v<<" ";
}
return 0;
}

posted on   可爱楷玩算法  阅读(145)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示