题解 CF450A 【Jzzhu and Children】

前置知识:

我们在这题用到的算法是STL中的queue

先来熟悉一下queue

定义 #include //万能头也包含

详细用法:

定义一个queue的变量 queue a

查看是否为空范例 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;
}

望通过,谢谢


 上一篇
题解 CF701B 【Cells Not Under Attack】 题解 CF701B 【Cells Not Under Attack】
题目分析:这题是给出一个大小为n*n的棋盘,然后在上面放上m个“车”,每个“车”的坐标为Xi和Yi,要你分别算出各个棋子放上去后棋盘上还有多少个安全位置 使用算法:本人一开始看到这篇水题也以为是一道二维模拟题,但看清题目要求后,发现n的
2020-04-10
下一篇 
题解 CF474A 【Keyboard】 题解 CF474A 【Keyboard】
这道题其实是一道大水题,但是本蒟蒻一开始竟然昏了头,手敲出每一个的前面一项或后面一项 if(a=='w') cout<<'e'; if(a=='e') cout<<'r'; if(a=='r') cout<
2020-04-10
  目录