1 条题解

  • 0
    @ 2026-8-8 13:35:25

    本题解同步发布在个人博客

    首先这题的无穷条件是什么呢?不难发现如果有相邻两个都不为 11 的数就是无穷的。

    那么这题其实就在于统计 11 总共会出现的次数。

    然后就可以去手玩这三个样例了:3111311231121,玩完后结论就差不多得出来了。

    就是从后往前遍历,将答案加一并乘上当前的数字(这个数字相当于多倍贡献)。

    #include<bits/stdc++.h>
    using namespace std;
    #define int long long
    const int N=1e6+10,P=998244353;
    int a[N];
    signed main()
    {
    	int n;cin>>n;
    	for(int i=1;i<=n;i++)scanf("%1d",&a[i]);
    	int ans=0;
    	for(int i=n;i>=2;i--)
    	{
    		if(a[i]!=1&&a[i-1]!=1)
    		{
    			cout<<-1;
    			return 0;
    		}
    		ans++;ans=ans*a[i]%P;
    	}
    	cout<<ans;
    	return 0;
    }
    
    • 1

    信息

    ID
    8879
    时间
    2000ms
    内存
    1024MiB
    难度
    10
    标签
    递交数
    3
    已通过
    2
    上传者