CCF-CSP 201909 赛题训练
Posted ZSYL
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CCF-CSP 201909 赛题训练相关的知识,希望对你有一定的参考价值。
CCF-CSP 201909 赛题训练
小明种苹果
第1行包含两个正整数N和M,分别表示苹果树的棵数和疏果操作的轮数。
第1+i行(1<= i <= N),每行包含M+1个整数ai0,ai1,…,aiM
。其中ai0为正整数,表示第一轮疏果操作开始前第i棵树上苹果的个数。aij(1 <= j <= M)为零或负整数,表示第j轮疏果操作时从第i棵树上去掉的苹果个数。如果为0,表示没有去掉苹果;如果为负,其绝对值为去掉的苹果个数。每行中相邻两个数之间用一个空格分隔。
输出格式
输出到标准输出。
输出只有一行,包含三个整数T、k和P。其中,
- T为最后一轮疏果操作后所有苹果树上剩下的苹果总数(假设苹果不会因为其它原因减少);
- k为疏果个数(也就是疏果操作去掉的苹果个数)最多的苹果树编号;
- P为该苹果树的疏果个数。
相邻两个数之间用一个空格分隔。输入的数据保证是正确的,也就是说,每棵树在全部疏果操作结束后剩下的苹果个数是非负的。
样例1
输入:
3 3
73 -8 -6 -4
76 -5 -10 -8
80 -6 -15 0
输出:
167 2 23
样例解释:
第1棵苹果树的疏果个数为8+6+4 = 18, 第2棵为5+10+8 = 23,第3棵为6+15+0 = 21,因此最后一轮疏果操作后全部苹果树上的苹果个数总和为(73 -18)+ (76 - 23)+ (80 - 21)= 167,疏果个数最多的是第2棵树,其疏果个数为23。
#include<bits/stdc++.h>
using namespace std;
int main()
int n,m;
cin >> n >> m;
int max = -1, index = -1, sum = 0;
for (int i = 1; i <= n; i++)
int x = 0, temp = 0;
cin >> x;
for (int j = 0; j < m; j++)
int y;
cin >> y;
x += y;
temp += y;
sum += x;
if (abs(temp) > max)
max = abs(temp);
index = i;
cout << sum << " " << index << " " << max << endl;
return 0;
C语言:Link
#include<cstdio>
int N, M;
int T, k, P;
int main()
int d; //输入疏果个数
int maxd = 0; //最大疏果个数
scanf("%d%d", &N, &M);
for(int i=0; i<N; i++)
P=0;
scanf("%d", &d); //第一轮开始前的苹果个数
T+=d;
for(int j=1; j<=M; j++)
scanf("%d", &d);
T += d;
P -= d;
if(P > maxd)
maxd = P;
k = i+1;
printf("%d %d %d\\n", T, k, maxd);
return 0;
小明种苹果2
#include<bits/stdc++.h>
using namespace std;
// 全局变量,默认初始化
const int maxn=1002;
bool has[maxn]; // 第i棵树上是否有掉落
int main()
int n, m, x;
cin >> n; // n棵树
int all = 0, res = 0;
for (int i = 0; i < n; i++)
int sum = 0;
cin >> m;
cin >> sum; // 首次果子数量
for (int j = 1; j < m; j++)
cin >> x;
if (x <= 0)
sum += x;
else
if (sum > x)
has[i] = 1; // 标记掉果
all += 1; // 数量+1
sum = x; // 重新赋值当前果子数量
res += sum;
int E = 0;
// 统计组数
for(int i = 0; i < n; i++)
if(has[i] && has[(i+1)%n] && has[(i+2)%n]) E++;
cout << res << " " << all << " " << E;
return 0;
大佬代码:Link
#include<cstdio>
const int MAXN=1002;
bool has[MAXN]; //has[i]==true,第i+1棵树上有掉落
int N;
int T, D, E;
int main()
int m; //操作个数
int d; //操作记录
scanf("%d", &N);
for(int i=0; i<N; i++)
scanf("%d", &m);
int s=0; //第i棵树上的苹果总数
scanf("%d", &s);
T+=s;
for(int j=1;j<m;j++)
scanf("%d", &d);
if(d<0)
s+=d;
T+=d;
if(d>0)
if(s>d && has[i]==false) //有掉落,且之前未发生过掉落
has[i]=true;
D++;
T-=(s-d);
s=d; //重新统计该树上的苹果总数
//统计组数
for(int i=0;i<N;i++)
if(has[i] && has[(i+1)%N] && has[(i+2)%N]) E++;
printf("%d %d %d\\n", T, D, E);
return 0;
加油!
感谢!
努力!
以上是关于CCF-CSP 201909 赛题训练的主要内容,如果未能解决你的问题,请参考以下文章