首页 > 其他 > 详细

Codeforces Round #666 (Div. 2) C. Multiples of Length (构造,贪心)

时间:2020-09-12 22:51:50      阅读:66      评论:0      收藏:0      [点我收藏+]

技术分享图片

  • 题意:有一个长度为\(n\)的序列,可以操作\(3\)次,每次选取一段区间,然后区间的元素加减区间长度的倍数,\(3\)次操作后使得序列所有元素为\(0\),问具体操作情况.

  • 题解:假如我们能选择一整段区间\([1,n]\),使其所有元素都是\(n\)的倍数就好了,但是有的元素不是\(n\)的倍数,所以不能这样搞,但是我们可以选择\([2,n]\),这样区间长度就变成了\(n-1\),于是不管元素是不是\(n\)的倍数,\(n-1\)的倍数总能将其抵消使其成为\(n\)的倍数,接下来模拟搞一搞就好了,注意特判\(n=1\)的情况.

  • 代码:

    int n;
    ll a[N];
    
    int main() {
        //ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    	n=read();
    	for(int i=1;i<=n;++i){
    		a[i]=read();
    	}
    
    	if(n==1){
    		printf("1 1\n");
    		printf("1\n");
    		printf("1 1\n");
    		printf("1\n");
    		printf("1 1\n");
    		printf("%lld\n",-a[1]-2);
    		return 0;
    	}
    
    	printf("1 1\n");
    	printf("%lld\n",-a[1]);
    	a[1]=0;
    	printf("2 %d\n",n);
    	for(int i=2;i<=n;++i){
    		printf("%lld ",a[i]*(n-1));
    		a[i]*=n;
    	}
    	puts("");
    	printf("1 %d\n",n);
    	for(int i=1;i<=n;++i){
    		printf("%lld ",-a[i]);
    	}
    
        return 0;
    }
    

Codeforces Round #666 (Div. 2) C. Multiples of Length (构造,贪心)

原文:https://www.cnblogs.com/lr599909928/p/13658576.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!