【NOIP-普及组-复赛】(6)NOIP2015普及组复赛题解

这只是一个作业,如果有帮到您的,我只能说。。。这不科学。。。
————————————华丽的分割线————————————
第一题:

这题很水双重for枚举直n次输出当然你要数论我也没办法
代码:

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#define ci const int
#define ri register int
#define ll long long
#define reg register
#define boom return 
#define cmax(a,b) (a)>(b)?(a):(b)
#define cmin(a,b) (a)<(b)?(a):(b)
#define For(i,a,b) for(i=a;i>k;
	for(day=1;day<=k;day++)
	{
		if(i==count)
		{
			count++;
			i=0;
		}
	    i++;
		ans+=count;
		
	}
	cout<

————————————华丽的分割线————————————
第二题:

也很水枚举每个?的周围然后输出这里是代码:

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#define ci const int
#define ri register int
#define ll long long
#define reg register
#define boom return 
#define cmax(a,b) (a)>(b)?(a):(b)
#define cmin(a,b) (a)<(b)?(a):(b)
#define For(i,a,b) for(i=a;i=0&&y>=0&&x>n>>m;
	for(i=0;i>a[i][j];
	for(i=0;i

话说 为什么每年都要来一个游戏啊(什么时候出MC是个问题)
————————————华丽的分割线————————————
第三题:


首先你会发现y没任何用只是确定x,z奇偶性相同。。。
然后貌似要用数论什么乘法分配律来搞
一头雾水(我才刚初一数学很弱)
所以把推理打出来不解释
答案等于a1*(num a1*(n-1)+num a2+ num a3+……+num an)+ a2*(num a2*(n-1)+num a1+ num a3+……+num an)+……+an*(num a1*+num a2+ num a3+……+num an*(n-1))
用sum来表示num从a1到an的和,用sum2表示a1到an的和,答案=sum*sum2+(n-2)*sum2
不过%10007什么的很恶心qwq
代码(全是被模搞长的!!!):

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#define ci const int
#define ri register int
#define ll long long
#define reg register
#define boom return 
#define cmax(a,b) (a)>(b)?(a):(b)
#define cmin(a,b) (a)<(b)?(a):(b)
#define For(i,a,b) for(i=a;i

————————————华丽的分割线————————————
第四题:


这道题因该是数结qwq
首先为了让答案最大我们把每个家都记一个分值=路程*2+推销的疲劳值
然后每次推销加上这个值就好了。
不过每次操作后每家的路程对答案的贡献都会减小(为什么你知道的)
不过也不能全部都减我们记一个max为选了要去推销的家的最远路程。
比这个路程多的要全减少的清零。
所以我们开两个优先队列:

struct fam
{
    int s,poi,nu;
    bool operator<(fam b)const
    {
        if(poi!=b.poi)return poi L,R;

然后每次把两个队列最大的数分别拿出来对比小的放回去
然后更新max以max为界重新更新两个队列
就完了qwq下面代码:

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#define ci const int
#define ri register int
#define ll long long
#define reg register
#define boom return 
#define cmax(a,b) (a)>(b)?(a):(b)
#define cmin(a,b) (a)<(b)?(a):(b)
#define For(i,a,b) for(i=a;i'9')&&ch!='-');
    ch=='-'?(bb=1,aa=0):(bb=0,aa=ch-'0');
    while(ch=getc(),ch>='0'&&ch<='9') aa=(aa<<1)+(aa<<3)+ch-'0';
    bb?aa=-aa:0;
    return aa;
}
ci MAXN=1000086;
int n,vis[MAXN],ans,s[MAXN],a[MAXN],now;
struct fam
{
    int s,poi,nu;
    bool operator<(fam b)const
    {
        if(poi!=b.poi)return poi L,R;
fam MAX(fam a,fam b){return anow)
            for(now=big.s,j=1;j<=big.nu;j++)
                if(!vis[j])L.push((fam){s[j],a[j],j});
    }
    return 0;
}
//没有什么是两个巴掌不能解决的,如果有就再来两个巴掌

数结好题。
————————————华丽的分割线————————————
2015好水!!!!

你可能感兴趣的:(NOIP-普及组-复赛)