NOIP2002提高组水题
又是一个贪心题,本题的策略是先算出最终值,然后一个一个比较。
举个例子 10 9 2 这个三个数,最终数要是7。
先看10 , 10 比7 大 所以从10中拿走3给9,这就合适了。
接下来 9+3之后就变成了12,再从12中取走5给2,就合适了。
最后一个数一定为 最终值,请自行思考为什么。
#include <iostream> using namespace std; int main(){ std::ios::sync_with_stdio(false);//一开始莫名其妙的超时 所以开了个读入优化 int n,a[10001],j=1,biao=0,tot=0; cin>>n; for(int i=1;i<=n;i++){ cin>>a[i]; biao = biao + a[i]; } biao = biao / n; while(j != n){ if(a[j] != biao) { //如果当前值不等于最终值的话就 a[j+1]=a[j+1]+a[j]-biao; //就把当前值与下一个值进行运算 a[j] = biao; //将当前值改为最终值 ++tot;//挪动加一 } j++;//这里千万不要else continue; 第一次手贱加的结果死循环了 } cout<<tot; return 0; }