欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

jzoj4282-[NOIP2015模拟10.29B组]平方数游戏【构造】

程序员文章站 2022-03-11 16:07:31
正题题目大意构造一个ai={1,−1}a_i=\{1,-1\}ai​={1,−1}使得最小化∣∑i=1naii2∣|\sum_{i=1}^na_ii^2|∣i=1∑n​ai​i2∣解题思路我们发现有对于一段连续的x2−(x+1)2−(x+2)2+(x+3)2=4x^2-(x+1)^2-(x+2)^2+(x+3)^2=4x2−(x+1)2−(x+2)2+(x+3)2=4,那么就有x2−(x+1)2−(x+2)2+(x+3)2−(x+4)2+(x+5)2+(x+6)2−(x+7)2=0x^2-(x+...

正题


题目大意

构造一个 a i = { 1 , − 1 } a_i=\{1,-1\} ai={1,1}使得最小化 ∣ ∑ i = 1 n a i i 2 ∣ |\sum_{i=1}^na_ii^2| i=1naii2


解题思路

我们发现有对于一段连续的 x 2 − ( x + 1 ) 2 − ( x + 2 ) 2 + ( x + 3 ) 2 = 4 x^2-(x+1)^2-(x+2)^2+(x+3)^2=4 x2(x+1)2(x+2)2+(x+3)2=4,那么就有 x 2 − ( x + 1 ) 2 − ( x + 2 ) 2 + ( x + 3 ) 2 − ( x + 4 ) 2 + ( x + 5 ) 2 + ( x + 6 ) 2 − ( x + 7 ) 2 = 0 x^2-(x+1)^2-(x+2)^2+(x+3)^2-(x+4)^2+(x+5)^2+(x+6)^2-(x+7)^2=0 x2(x+1)2(x+2)2+(x+3)2(x+4)2+(x+5)2+(x+6)2(x+7)2=0

那么我们对于连续 8 8 8个就可以抵消掉,特判掉 1 ∼ 5 1\sim 5 15,然后预处理出 6 ∼ 13 6\sim 13 613的答案然后后面都按这么填取 0 0 0即可。


c o d e code code

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int n;
int main()
{
//	freopen("five.in","r",stdin);
//	freopen("five.out","w",stdout);
	scanf("%d",&n);
	if(n==1)printf("1\n-1");
	else if(n==2)printf("3\n1 -1");
	else if(n==3)printf("4\n1 1 -1");
	else if(n==4)printf("2\n1 1 1 -1");
	else if(n==5)printf("3\n-1 1 1 1 -1");
	else{
		if(n%4==1||n%4==2)printf("1\n");
		else printf("0\n");
		if(n%8==6) printf("1 1 -1 1 1 -1"),n-=6;
		else if(n%8==7) printf("-1 -1 1 -1 1 1 -1"),n-=7;
		else if(n%8==0) printf("1 -1 -1 1 -1 1 1 -1"),n-=8;
		else if(n%8==1) printf("1 1 -1 -1 1 -1 1 1 -1"),n-=9;
		else if(n%8==2) printf("1 -1 -1 -1 1 1 1 -1 1 -1"),n-=10;
		else if(n%8==3) printf("-1 1 -1 -1 -1 1 1 1 -1 1 -1"),n-=11;
		else if(n%8==4) printf("-1 1 -1 -1 -1 1 -1 1 -1 1 1 -1"),n-=12;
		else if(n%8==5) printf("-1 -1 1 -1 -1 1 -1 -1 -1 1 1 1 -1"),n-=13;
		for(;n;n-=8)printf(" 1 -1 -1 1 -1 1 1 -1"); 
	}
}

本文地址:https://blog.csdn.net/Mr_wuyongcong/article/details/109242173

相关标签: 构造 jzoj