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 ...
随机推荐
- python --- mulitprocessing(多进程)模块使用
1. 什么是进程? 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础.在早期面向进程设计的计算机结构中,进程是程序的基本执 ...
- 记React+.NetCore API实现动态列导出
1.效果演示 2.用到的第三方类库 前端:React,Dva,Antd 后端:ASP.NET CORE,System.Linq.Dynamic.Core,EPPlus.Core 3.基本思路 第一:E ...
- Spring Boot 使用maven打包成jar
1.application.properties加入如下配置 server.port= 2.修改pom.xml <?xml version="1.0" encoding=&q ...
- Tensorflow简单CNN实现
觉得有用的话,欢迎一起讨论相互学习~Follow Me 少说废话多写代码~ """转换图像数据格式时需要将它们的颜色空间变为灰度空间,将图像尺寸修改为同一尺寸,并将标签依 ...
- linux修改TCP最大连接数
环境 操作系统: oracle-linux7.3 修改系统支持的最大TCP连接 最大tcp连接数和系统允许打开的最大文件数,用户允许打开的最大文件数,TCP网络连接可用的端口范围有关,取上述的最小值: ...
- Flex Grid学习-链接
这些是我个人在学习这两种布局的时候参考的资料,希望对大家有用-- 1.Flex 阮一峰(flex语法讲解):http://blog.csdn.net/naruto_luoluo/article/det ...
- 面向对象编程之super内置函数的用法
先来看一段代码: 定义一个名叫People的父类,又定义了一个叫Teacher的老师类和一个叫Student的学生类 来继承People的类,并根据这两个子类实例化出两个对象s1和t1. class ...
- java配置context.xml文件
2018-02-08 23:32:23 修改context.xml文件 自从学习了servlet后,每次修改里面的内容后,想要访问都要重启服务器,这样感觉很麻烦的,所以今天就教大家一个方法,只需要 ...
- 在高并发、高负载的情况下,如何给表添加字段并设置DEFAULT值?
在高并发.高负载的情况下,如何给表添加字段并设置DEFAULT值? 在Oracle 12c之前,当Oracle表数据量上亿时,对表执行“ALTER TABLE XXX ADD COLUMN_XX VA ...
- es数据恢复杂记
kill -9或者断电等原因异常,es在重启后,会通过translog来进行数据恢复. 默认的恢复速度是较慢的,可以设置indices.recovery.current_streams:10增大恢复的 ...