ccf201703题解

ccf201703题解

标签(空格分隔): ccf题解 题解



1.201703-1 分蛋糕

题目描述

试题编号: 201703-1
试题名称: 分蛋糕
时间限制: 1.0s
内存限制: 256.0MB

分蛋糕

解析

题意:
按照题目中所给的数列顺序分蛋糕。
当一个人分到的蛋糕重量\(\geq k\),开始给下一个人分。最后一个人即使分不到重量为\(k\)的蛋糕,也算作分到蛋糕的人。
问一共有多少人分到了蛋糕?

我们可以设置一个桶\(sum\)来储存当前这个人所拥有的蛋糕重量,当\(sum \geq k\)时,开始给下一个人分。

通过代码

//2148153	<13100928923>	<王恪楠>	分蛋糕	11-06 21:20	431B	C++	正确	100	31ms	2.472MB
#include <bits/stdc++.h>
using namespace std;

const int MAXN = 1e3 + 50;

int a[MAXN];
int n, k;

int main()
{
    scanf("%d%d", &n, &k);

    for(int i = 0; i < n; i ++){
        scanf("%d", &a[i]);
    }



    int sum = 0, ans = 0;
    for(int i = 0; i < n; i ++){
        sum += a[i];

        if(sum >= k){
            ans ++;
            sum = 0;
        }
    }
    if(sum)    //如果蛋糕都分完,最后一个人的桶里还有蛋糕.说明他拥有的蛋糕重量大于0,小于k.也算作一位拥有蛋糕的人.
        ans ++;    
    cout << ans;
    return 0;
}

2.201703-2 学生排队

题目描述

试题编号: 201703-2
试题名称: 学生排队
时间限制: 1.0s
内存限制: 256.0MB

学生排队

解析

演示文稿1.png

通过代码

//2148180	<13100928923>	<王恪楠>	学生排队	11-06 21:39	849B	C++	正确	100	31ms	2.480MB
#include <bits/stdc++.h>
using namespace std;

const int MAXN = 1e3 + 50;

int a[MAXN];

int n, m;


void init()
{

    for(int i = 1; i <= n; i ++)
        a[i] = i;

    return;
}

int find(int id)
{

    for(int i = 1; i <= n; i ++)
        if(a[i] == id)
            return i;
}
void update(int pos, int step)
{
    int t = a[pos];
    if(step < 0){
        for(int i = pos; i >= pos + step; i --)
            a[i] = a[i - 1];

    }
    else{
        for(int i = pos; i <= pos + step; i ++)
            a[i] = a[i + 1];
    }
    a[pos + step] = t;
    return;

}
int main()
{
    scanf("%d%d", &n, &m);

    init();

    for(int i = 0; i < m; i ++){
        int id, step;
        scanf("%d%d", &id, &step);
        update(find(id), step);


    }
   for(int i = 1; i <= n; i ++)
        cout << a[i] << " ";

    return 0;
}
posted @ 2020-11-07 18:03  SatCH  阅读(130)  评论(0编辑  收藏  举报