题解 P1664 【每日打卡心情好】
简单的代码
#include <iostream>
using namespace std;
int n; unsigned int i,miss,x,sum,Max,score[]={0,1,3,7,30,120,365};
int main()
{
cin>>n;
while (--n>=0) {
cin >> x;
if (x) {
if (miss) Max-=min(Max,1u<<--miss),miss=0;
++Max;
for (i=6;i>=1;--i)
if (Max>=score[i]) break;
sum+=i;
} else ++miss;
}
cout << sum;
return 0;
}
- 相信大家可以看懂变量名,下面来说说代码优化。
- 减少2^(n-1)天,我用的代码是Max-=min(Max,1u<<--miss)。凡是2的倍数,都可以使用位移,而不用pow。
- 我写代码的习惯是,数据统一保存,score[]={0,1,3,7,30,120,365},然后循环遍历。这样看着简洁,同时易于维护。