原题链接

题意简述

给出一个由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的更多相关文章

  1. Atcoder Grand Contest 010 B - Boxes 差分

    B - Boxes 题目连接: http://agc010.contest.atcoder.jp/tasks/agc010_b Description There are N boxes arrang ...

  2. 【AtCoder】AGC010

    AGC010 A - Addition 如果所有数加起来是偶数那么一定可以,否则不行 #include <bits/stdc++.h> #define fi first #define s ...

  3. Fedora 24 Gnome Boxes 无法ping通网络

    安装Fedora 24在试用虚拟机时发现无法ping通外网. 我傻傻地以为是软件问题. 问题描述: 尝试ping程序来测试网络连通性: (我之前也是ping百度,后来在为了少打字百度了一些比较短的域名 ...

  4. Problem B Boxes in a Line

     省赛B题....手写链表..其实很简单的.... 比赛时太急了,各种手残....没搞出来....要不然就有金了...注:对相邻的元素需要特判..... Problem B Boxes in a Li ...

  5. 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 ...

  6. boxes

    boxes [英][bɒksɪz][美][bɑ:ksɪz] n.盒( box的名词复数 ); 一盒; 电视; 小亭; v.把…装入盒[箱,匣]中( box的第三人称单数 ); 拳击;   以上结果来自 ...

  7. 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 ...

  8. UVa 103 - Stacking Boxes(dp求解)

    题目来源:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=3&pa ...

  9. [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 ...

随机推荐

  1. python --- mulitprocessing(多进程)模块使用

    1. 什么是进程? 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础.在早期面向进程设计的计算机结构中,进程是程序的基本执 ...

  2. 记React+.NetCore API实现动态列导出

    1.效果演示 2.用到的第三方类库 前端:React,Dva,Antd 后端:ASP.NET CORE,System.Linq.Dynamic.Core,EPPlus.Core 3.基本思路 第一:E ...

  3. Spring Boot 使用maven打包成jar

    1.application.properties加入如下配置 server.port= 2.修改pom.xml <?xml version="1.0" encoding=&q ...

  4. Tensorflow简单CNN实现

    觉得有用的话,欢迎一起讨论相互学习~Follow Me 少说废话多写代码~ """转换图像数据格式时需要将它们的颜色空间变为灰度空间,将图像尺寸修改为同一尺寸,并将标签依 ...

  5. linux修改TCP最大连接数

    环境 操作系统: oracle-linux7.3 修改系统支持的最大TCP连接 最大tcp连接数和系统允许打开的最大文件数,用户允许打开的最大文件数,TCP网络连接可用的端口范围有关,取上述的最小值: ...

  6. Flex Grid学习-链接

    这些是我个人在学习这两种布局的时候参考的资料,希望对大家有用-- 1.Flex 阮一峰(flex语法讲解):http://blog.csdn.net/naruto_luoluo/article/det ...

  7. 面向对象编程之super内置函数的用法

    先来看一段代码: 定义一个名叫People的父类,又定义了一个叫Teacher的老师类和一个叫Student的学生类 来继承People的类,并根据这两个子类实例化出两个对象s1和t1. class ...

  8. java配置context.xml文件

    2018-02-08   23:32:23 修改context.xml文件 自从学习了servlet后,每次修改里面的内容后,想要访问都要重启服务器,这样感觉很麻烦的,所以今天就教大家一个方法,只需要 ...

  9. 在高并发、高负载的情况下,如何给表添加字段并设置DEFAULT值?

    在高并发.高负载的情况下,如何给表添加字段并设置DEFAULT值? 在Oracle 12c之前,当Oracle表数据量上亿时,对表执行“ALTER TABLE XXX ADD COLUMN_XX VA ...

  10. es数据恢复杂记

    kill -9或者断电等原因异常,es在重启后,会通过translog来进行数据恢复. 默认的恢复速度是较慢的,可以设置indices.recovery.current_streams:10增大恢复的 ...