发布时间:2025-12-10 21:33:28 浏览次数:5
这题目怀疑和P4439撞Idea了,因为都差不多好吗!
首先我们来看这道题目,诶?这不就是算整体吗?然后立马想到了刚做的P4439,发现这两道题目Idea差不多,都是算一个序列里整体的个数。这道题目中,管理员小\(Z\)每次只能走都是\(0\)的一段,而一开始必定是\(0\),所以小\(Z\)最少走过的秒数肯定是这一段里面所有整体的个数。所以这样就很简单了,\(O(n)\)做法轻松搞定。
下面贴上我的\(AC\)代码:
#include #include #include using namespace std;int n, a[1000007], ans;int main() {scanf("%d", &n);for(int i = 1; i 1 && a[i] != a[i - 1])ans++;}printf("%d", ans);return 0;}今天早上碰到了@xieyi0408,然后他展示了一下他的写法,我发现他的比我的还要简单那么一点,所以把他的也贴一下:
#include#define int long long//好东西 using namespace std;int ans,now,last=-1,n;int read(){int x=0,s=1;char c=getchar();while(c>'9'||c='0'&&c<='9'){x=x*10+c-'0';c=getchar();}return x*s;}main(){n=read();for(int i=1;i<=n;i++){now=read();if(now!=last)last=now,ans++;}printf("%lld",ans);}他这个写法就是直接保存上一个点的状态,如果目前的状态比上一个状态不同就将last赋值为目前的状态,以便之后的比较,然后再将答案计数。
这两个代码都仅供参考,有什么不懂的请私信我或@xieyi0408。
这次月赛是不是该调个顺序,感觉难度安排有点不妥