亂搞——均分紙牌

題目來源


洛谷P1031均分紙牌

https://www.luogu.org/problem/show?pid=1031


思路


輸入後將每堆紙牌的數量減去平均數

即爲這堆紙牌應被移給或應移給別的堆的紙牌數量

若第i堆紙牌數大於0 則第i+1堆紙牌數加上第i堆紙牌數 

即將第i堆剩下的紙牌全部移到下一堆 移動次數加一

若第i堆紙牌數小於0 則第i+1堆紙牌數加上第i堆紙牌數(絕對值) 

即當第i+1~n堆紙牌數均爲目標數量後剩下的紙牌全部移到這一堆 移動次數加一

若第i堆紙牌數大於0 則第1~i堆紙牌數已均爲目標數量

即沒有紙牌需要通過第i堆牌向左移動


代碼(C++)


#include <cstdio>
using namespace std;
int n,i,m=0,ans=0,num[200010];
int main()
{
    scanf("%d",&n);
    for(i=1;i<=n;++i)
    	scanf("%d",&num[i]),m+=num[i];
    m=m/n;
    for(i=1;i<n;++i)
    {
    	num[i]-=m;
    	if(num[i]!=0)
    		++ans,num[i+1]+=num[i];
    }	
    printf("%d",ans);
    return 0;
}


發佈了57 篇原創文章 · 獲贊 39 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章