NOIP2015普及組 T1金幣
阿新 • • 發佈:2018-05-20
http 代碼 sin https class new 復雜 衡量 TP
我對模擬的理解:http://www.cnblogs.com/AKMer/p/9064018.html
題目鏈接:https://www.luogu.org/problemnew/show/P2669
這是我\(OI\)生涯中第一場比賽的第一道題目,而且這題在\(2015\)的普及組之前我就做過了(當時教練說\(NOIP\)會從\(NOI\)題庫裏選原題於是我就狂刷了一通\(emmm\))。只需根據它的題意模擬按階段發金幣,然後特判最後一個階段是否會全部發完就可以了,水的不能再水。
時間復雜度(最壞情況):\(O\)(141) \[\sum_{i=1}^{140} i<1e4<\sum_{i=1}^{141}i\]
空間復雜度:\(O\)(1)
代碼如下:
#include <cstdio>
#include <algorithm>
using namespace std;
int n,sum;
int read() {
int x=0,f=1;char ch=getchar();
for(;ch<‘0‘||ch>‘9‘;ch=getchar())if(ch==‘-‘)f=-1;
for(;ch>=‘0‘&&ch<=‘9‘;ch=getchar())x=(x<<1)+(x<<3)+ch-‘0‘;
return x*f;
}//快讀。雖然這已經暴露了我省選選手的身份,但是我還是要寫這篇博客>_<
int main() {
n=read();
int k=1;//n為天數,k為階段,第k階段持續k天,每天發k枚金幣。
while(n) {//當還有發金幣的天數還有剩余
if(n>=k) {
sum+=k*k;
n-=k;//第k階段會完全過完
}
else {
sum+=n*k;
n=0;//第k階段只過了一部分,n天就過完了。為了退出循環,特地把n扣成0,雖然按照現實生活天數也只能用自然數來衡量……
}
k++;//進入下一階段
}
printf("%d\n",sum);
return 0;
}
NOIP2015普及組 T1金幣