前置知识:
我们在这题用到的算法是STL中的queue
先来熟悉一下queue
定义 #include
详细用法:
定义一个queue的变量 queue
查看是否为空范例 a.empty() 是的话返回1,不是返回0;
从已有元素后面增加元素 a.push()
输出现有元素的个数 a.size()
显示第一个元素 a.front()
显示最后一个元素 a.back()
清除第一个元素 a.pop()
好,这题还要用到一个知识,pair
pair比较简单,可以理解成一个打包盒
pair <int,int> a
上面就是他的定义
code:
#include <cstdio>
#include <queue> //包含queue的头文件
using namespace std;
queue <pair<int,int> > a; //定义一个queue,里面有两个相关联的容器
int main()
{
int n,m;
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++) //注意,不能从0~n-1,编号是从1开始的
{
int x;
scanf("%d",&x);
a.push(make_pair(x,i)); //读入x和编号
}
int cnt,s;
while(a.size()!=1) //重复循环直到队列里只剩最后一个
{
s=a.front().first; //s=队列中第一个元素的前一个量,也就是这个孩子想要的糖
cnt=a.front().second; //cnt=队列中第一个元素的后一个量,也就是这个孩子的编号
a.pop(); //不管怎么样,先弹出,反正已经记录好了
s-=m; //给他糖,则需要的糖数就减少
if(s>0) //如果还不够
{
a.push(make_pair(s,cnt)); //接着读入,注意,队列里读入都是往最后压入
}
}
printf("%d\n",a.front().second); //输出最后一个孩子的编号
return 0;
}
望通过,谢谢