AGC010 - B: Boxes
题意简述
给出一个由n(n≤105)个数构成的环,每次可以选择一个位置并从这个数起顺时针依次对每个数-1,-2,-3,…,-n。问能否将所有数全变为0。
分析
考虑一次操作对环带来了什么影响。 
(在an后加一个a1来表示数环) 
6,3,5,7,9(,6)  ->  5,1,2,3,4(,5) 
5,1,2,3,4(,5)  ->  0,0,0,0,0(,0) 
差分后: 
−3,2,2,2,−3  ->  −4,1,1,1,1 
−4,1,1,1,1  ->  0,0,0,0,0 
可以看到,一次操作相当于对差分数列(或者说是差分环)的一个位置加上n-1,剩下的位置减去1。那么只要检查原环的差分数列能否全变为0,并且此时和也为0就行了。 
对每一个位置的计算复杂度为O(1),总时间复杂度为O(n)。
实现
每次操作会使和sum减少 s0=n(n+1)/2,那么总共进行了 k=sum/s0 次操作。如果k不为整数那么不可行。 
差分数列的每个位置要能在数个 +(n−1) 和 −1 后变为0,否则不可行。 
列式表示为 (ai+1−ai)+xi(n−1)−(k−xi)=0,如果任何一个xi不为整数那么不可行。 
最后,如果∑xi≠k说明此时sum≠0,不可行。
代码
#include <cstdio>
typedef long long lint;
int const N=1e5+10;
int n,a[N];
int dif[N];
int main()
{
    freopen("b.in","r",stdin);
    scanf("%d",&n);
    if(n==1) {printf("YES"); return 0;}
    for(int i=1;i<=n;i++) scanf("%d",&a[i]);
    a[n+1]=a[1];
    lint s=(lint)n*(n+1)>>1,sum=0;
    for(int i=1;i<=n;i++) sum+=a[i],dif[i]=a[i+1]-a[i];
    if(sum%s!=0) {printf("NO"); return 0;}
    lint k=sum/s,sumX=0;
    for(int i=1;i<=n;i++)
    {
        lint x=(k-dif[i])/n;
        if(x<0 || x*n!=k-dif[i]) {printf("NO"); return 0;}
        sumX+=x;
    }
    if(sumX==k) printf("YES");
    else printf("NO");
    return 0;
}
注意
开longlong!int*int也有可能爆int,要先转成longlong再乘! 
连WA六发…
AGC010 - B: Boxes的更多相关文章
- Atcoder Grand Contest 010 B - Boxes 差分
		
B - Boxes 题目连接: http://agc010.contest.atcoder.jp/tasks/agc010_b Description There are N boxes arrang ...
 - 【AtCoder】AGC010
		
AGC010 A - Addition 如果所有数加起来是偶数那么一定可以,否则不行 #include <bits/stdc++.h> #define fi first #define s ...
 - Fedora 24 Gnome Boxes 无法ping通网络
		
安装Fedora 24在试用虚拟机时发现无法ping通外网. 我傻傻地以为是软件问题. 问题描述: 尝试ping程序来测试网络连通性: (我之前也是ping百度,后来在为了少打字百度了一些比较短的域名 ...
 - Problem B    Boxes in a Line
		
省赛B题....手写链表..其实很简单的.... 比赛时太急了,各种手残....没搞出来....要不然就有金了...注:对相邻的元素需要特判..... Problem B Boxes in a Li ...
 - Codeforces Round #229 (Div. 2)  C. Inna and Candy Boxes 树状数组s
		
C. Inna and Candy Boxes Inna loves sweets very much. She has n closed present boxes lines up in a ...
 - boxes
		
boxes [英][bɒksɪz][美][bɑ:ksɪz] n.盒( box的名词复数 ); 一盒; 电视; 小亭; v.把…装入盒[箱,匣]中( box的第三人称单数 ); 拳击; 以上结果来自 ...
 - Brute Force - B. Candy Boxes ( Codeforces Round #278 (Div. 2)
		
B. Candy Boxes Problem's Link: http://codeforces.com/contest/488/problem/B Mean: T题目意思很简单,不解释. ana ...
 - UVa 103 - Stacking Boxes(dp求解)
		
题目来源:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=3&pa ...
 - [CareerCup] 9.10 Stack Boxes 垒箱子问题
		
9.10 You have a stack of n boxes, with widths w., heights hir and depths drThe boxes cannot be rotat ...
 
随机推荐
- 国家语言,语言代码,locale id对应表
			
国家语言,语言代码,locale id对应表.比如 en_US对应的id为1033, 中文的locale=zh_CN,id=2052. Locale Languagecode LCIDstring L ...
 - Servlet--HttpServletRequest一些不常用的方法
			
我们在使用Servlet和表单进行交互的时候,不管是传参和接参经常要写一些路径.关于具体的Servlet的传参和接参我后面会有详细的整理,这里先整理一下不怎么常用的到一些HttpServletRequ ...
 - MyEclipse中好用的快捷键汇总
			
MyEclipse中常用的快捷键有很多,合理的使用其中一些快捷键组合,可以有效提高开发的效率和质量. 1.Ctrl + Shift + R:打开资源.可以查找并打开工作区中任何一个文件,且支持使用通配 ...
 - 【转】软件开发工具介绍之 6.Web开发工具
			
[本文转自http://www.cnblogs.com/dusonchen/archive/2011/02/09/1739087.html ] 1.EditPlus 无论是编写xhtml页面,还是cs ...
 - atom中开发vue常用插件
			
atom: 开发利器,界面友好,配色出色,好用的插件众多. language-vue: 这个是首推,因为它就是为vue而生的呀,支持很多vue里的提示.在空的vue页面敲tem,vue模板的提示就自动 ...
 - Hibernate的五个主要接口
			
Hibernate作为持久成中间件,它的具体实现对与上层调用是透明的,即上层通过接口来调用Hibernate的具体实现,所以对于入门级别的讨论来说,自然应该先从接口开始了.
 - ferror,perror,cleaner
			
1.ferror 函数原型: int ferror(FILE *fp) 功能:测试文件是否出现错误 返回值:未出错是0:出错为非0. 每次调用文件输入输出函数,均产生一个新的ferror函数值 fop ...
 - 《.NET 设计规范》第 7 章:异常
			
第 7 章:异常 异常与各种面向对象语言集成得非常好. 异常增强了 API 的一致性. 在用返回值来报告错误时,错误处理的代码与可能会发生错误的代码距离总是很近. 更容易使错误处理的带码全局化. 错误 ...
 - Spring-shiro源码陶冶-DefaultFilter
			
阅读源码有助于陶冶情操,本文旨在简单的分析shiro在Spring中的使用 简单介绍 Shiro是一个强大易用的Java安全框架,提供了认证.授权.加密和会话管理等功能 Apache Shiro自带的 ...
 - BZOJ 3744: Gty的妹子序列 [分块]
			
传送门 题意:询问区间内逆序对数 感觉这种题都成套路题了 两个预处理$f[i][j]$块i到j的逆序对数,$s[i][j]$前i块$\le j$的有多少个 f我直接处理成到元素j,方便一点 用个树状数 ...