AtCoder Grand Contest 010 B题 题目链接
题意n个盒子,第i个盒子有ai个石头。 重复这个步骤:选一个盒子i,每次从第i+j个盒子中移走j个石头,j从1到n,第n+k个盒子被称为第k个盒子。若某一轮有盒子里石头不够,就停止,且这一轮都不能执行。问能否清空所有盒子。
题解代码#include <cstdio> #include <cstring> #include <algorithm> #include <iostream> #define ll long long #define N 100005 #define inf 0x3f3f3f3f using namespace std; ll sum,a[N],t,tmp,n; int main() { cin>>n; for(int i=1;i<=n;i++){ cin>>a[i]; sum+=a[i]; t+=i; } if(sum%t)cout<<"NO"; else{ tmp=a[1]; for(int i=1;i<n;i++)a[i]=a[i+1]-a[i]; a[n]=tmp-a[n]; ll d=sum/t,ok=1; for(int i=1;i<=n&&ok;i++){ a[i]-=d; if(a[i]%n||a[i]>0)ok=0; } if(ok)cout<<"YES"; else cout<<"NO"; } return 0; } ---来自腾讯云社区的---饶文津
微信扫一扫打赏
支付宝扫一扫打赏