2017.3.26

    这次考试考的都是往年noip的真题,难度也都是在23题左右,考试的成绩觉得还可以,只是最后一道题有点遗憾。

    第一题扫雷,openjudge原题。比较简单就过了。第二题比例化简,当时出了一点小问题,但也比较轻松就解决了。主要的难点是第三题,当年noip普及组第三题:小朋友的数字。

    第二题主要也就是注意两数相除,如果要保留小数,应先*1.0

    第三题最后讲过、改过之后还是没有AC。而且觉得自己的程序我还是没想通我的为什么会错。把最后八十的代码贴出来:

    有 n 个小朋友排成一列。每个小朋友手上都有一个数字,这个数字可正可负。规定每个小朋友的特征值等于排在他前面(包括他本人)的小朋友中连续若干个(最少有一个)小朋友手上的数字之和的最大值。 作为这些小朋友的老师,你需要给每个小朋友一个分数,分数是这样规定的:第一个小朋友的分数是他的特征值,其它小朋友的分数为排在他前面的所有小朋友中(不包括他本人),小朋友分数加上其特征值的最大值。

请计算所有小朋友分数的最大值,输出时保持最大值的符号,将其绝对值对 p 取模后输出。

/*上面是第三题的题目*/
输入部分
#include <iostream>
#include <cstdio>
#include <algorithm>
long long a[1000100],b[1000100],c[1000100];
using namespace std;
int main()
{
	freopen("number.in","r",stdin);
	freopen("number.out","w",stdout);
	long long n,p,maxx2=-10000000;
	cin>>n>>p;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
		b[i]=0;
	}
特征值处理
	b[1]=a[1];
	long long sum,maxx=a[1];
	if (a[1]>0) sum=a[1];
	else  sum=0;
	
	for(int i=2;i<=n;i++)
	{
		sum=sum+a[i];
		if (sum>maxx)  maxx=sum;
		b[i]=maxx;
		if (sum<0) sum=0;
	}
分数处理

	
    c[1]=b[1];
	maxx=c[1];
	c[2]=b[1]+c[1];
	for(int i=3;i<=n;i++)
	{
		if(b[i-1]>0) c[i]=b[i-1]+c[i-1];
		else c[i]=c[i-1];
	}
	
	if(maxx<c[n]) maxx=c[n]; //这里再进行比较,以防漏掉
	
	cout<<maxx%p;
	
	return 0;
}
    第三题按照这种思路去做,最后两组会超时,也就是80。

    事实告诉我们,noip并不是所有的题都那么难,但也不会给你所有的分。拼尽全力去拿你可以拿到的分,同时尽量避免因琐碎的细节失分、超时的情况。尽全力就好了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值