【题解】P1031 均分纸牌
题面
前言
考古 ing,提高组 T1
正文
题意给出了极好的性质——可以被均分
换言之,我们可以求出一个平均值(即目标值)
那么自然在这序列中会出现一些不同于平均值的元素
依照题意,让元素抹平与平均值的差距只能由相邻两个元素转移过来
特殊地,\(a_1\) 与 \(a_n\) 只能从一个方向转移过来
从一个方向?
设这个平均值为 \(v\)
-
若 \(a_1 \neq v\),显然 \(a_2\) 需要给出 \(|v-a_1|\) 的纸牌
-
若 \(a_1 = v\),说明 \(a_1\) 已经符合要求,那就不必考虑它,删去即可;则 \(a_2\) 变成新的 \(a_1\),继续循环 1. 或 2.
好像就无了~
代码
#include<iostream>
using namespace std;
const int maxn=1e5+10;
int n,ans,v,a[maxn];
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
v+=a[i];
}
v/=n;
for(int i=1;i<n;i++){
if(a[i]!=v){
a[i+1]-=v-a[i];
ans++;
}
}
cout<<ans<<endl;
return 0;
}
后记
简单贪心题目捏
完结撒花!