有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;
}
标签:输出,10000,游戏,int,a1,id,输入,翻牌
From: https://www.cnblogs.com/algorithm-hu/p/17997778