1. 程式人生 > >NOIP普及組2015 T1金幣

NOIP普及組2015 T1金幣

play 階段 for pac getchar 一場 生涯 cnblogs char

我對模擬的理解:http://www.cnblogs.com/AKMer/p/9064018.html

題目鏈接:https://www.luogu.org/problemnew/show/P2669

這是我OI生涯中第一場比賽的第一道題目,而且這題在2015的普及組之前我就做過了(當時教練說NOIP會從NOI題庫裏選原題就狂刷了一通emmm)。只需根據它的題意模擬按階段發金幣,然後特判最後一個階段是否會全部發完就可以了,水的不能再水。代碼如下:

技術分享圖片
 1 #include <cstdio>
 2 #include <algorithm>
 3 using
namespace std; 4 5 int n,sum; 6 7 int read() { 8 int x=0,f=1;char ch=getchar(); 9 for(;ch<0||ch>9;ch=getchar())if(ch==-)f=-1; 10 for(;ch>=0&&ch<=9;ch=getchar())x=(x<<1)+(x<<3)+ch-0; 11 return x*f; 12 }//快讀。雖然這已經暴露了我省選選手的身份,但是我還是要寫這篇博客>_<
13 14 int main() { 15 n=read(); 16 int k=1;//n為天數,k為階段,第k階段持續k天,每天發k枚金幣。 17 while(n) {//當還有發金幣的天數還有剩余 18 if(n>=k) { 19 sum+=k*k; 20 n-=k;//第k階段會完全過完 21 } 22 else { 23 sum+=n*k; 24 n=0;//第k階段只過了一部分,n天就過完了。為了退出循環,特地把n扣成0,雖然按照現實生活天數也只能用自然數來衡量……
25 } 26 k++;//進入下一階段 27 } 28 printf("%d\n",sum); 29 return 0; 30 }
View Code

NOIP普及組2015 T1金幣