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
解析
通过代码
//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;
}
胜负师是求道者与苦行僧的结合。