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 赛题训练的主要内容,如果未能解决你的问题,请参考以下文章

CCF-CSP 201604 赛题训练

CCF-CSP 201612 赛题训练

CCF-CSP 201609 赛题训练

CCF-CSP 201709 赛题训练

CCF-CSP 201912 赛题训练

CCF-CSP 201703 赛题训练