CF83B---Docter的题解
taikongsha · · 题解
题意
这题很容易理解,就是给你
思路
我认为这道题可以用队列做。
它给你
然后判断这个数减
如果大的话,将这个数减
在进行
(这个下标是输入这
否则就不管这个数(不把它加到队尾)。
如果在
接下来上代码
#include<bits/stdc++.h>
using namespace std;
int n,k;
int main(){
cin>>n>>k;
queue <long long> q; //储存数的队列
queue <long long> xb; //储存下标的队列
for(int i=0;i<n;i++){ //输入 n 个数并储存他们的下标
int a;
cin>>a;
q.push(a);
xb.push(i+1);
}
for(int i=0;i<k;i++){ // k 次操作
if(q.empty()==1){ //如果在操作中所有数都没了的话,就跳出操作,输出$-1$
cout<<"-1"<<endl;
return 0;
}
int a=q.front()-1,b=xb.front();
q.pop();xb.pop();
if(a>0){ //判断这个数在操作后是否大于 0
q.push(a);
xb.push(b); //把数和下标放到各自的队列尾
}
}
while(!xb.empty()){
cout<<xb.front()<<" "; //输出队列
xb.pop();
}
cout<<endl;
return 0;
}