zoukankan      html  css  js  c++  java
  • arc110b

    arc110b

    大意

    给定一个长为 (N) 且仅有 (0,1) 的串,问:

    给定串在 (10^{10})(110) 首尾相接连成的串中出现了几次(位置可以有重复!)

    思路

    第一次以为不能重复...不看样例的后果

    先考虑最特殊的情况,给定串为 (1) ,此时答案是 (2*10^{10})

    然后以第一个 (110) 的三个位置为开头,必须要能够匹配,否则不存在。

    不妨假设在第一个 (110)(0) 处开始,并完成了匹配。

    那么一次匹配跨越的 (110) 的个数显然为 (num=(2+n+2)/3) 向下取整。

    然后,我们删去第一个 (110) ,因为排除最特殊的情况后,一个 (110) 不可能同时作为开头两次。

    最后答案显然为 (10^{10}-num+1)

    代码

    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    #include <cmath>
    #include <cstring>
    using namespace std;
    
    #define ll long long
    #define ull unsigned long long
    #define cint const int&
    #define Pi acos(-1)
    
    const int mod = 998244353;
    const int inf_int = 0x7fffffff;
    const ll inf_ll = 0x7fffffffffffffff;
    const double ept = 1e-9;
    
    string a;
    int n;
    char t[3] = {'1', '1', '0'};
    ll l = 0;
    
    int main() {
        bool flag=0;
        cin >> n >> a;
        if(a == "1" ) {
            cout << (ll)(2*1e10) << endl;
            return 0;
        }
        for(int i=0; i<3; i++) {
            for(int j=0; j<n; j++) {
                if(t[(i+j)%3] != a[j]) break;
                if(j == n-1) flag=1;
            }
            if(flag) {
                ll ans = 1e10 - (n+i+2)/3 + 1;
                cout << ans << endl;
                return 0;
            }
        }
        cout << 0 << endl;
        return 0;
    }
    

    -2,40min

  • 相关阅读:
    WebService 通过POST方式访问时候,因 URL 意外地以“/方法名”结束,请求格式无法识别 解决办法
    SQL Server 触发器
    JS数据类型转换
    .net注册到IIS
    SQL Server 常用sql操作语句
    浅解DLL
    有关注册表API函数
    [原]惜 时
    图解双机共享ADSL上网
    如何在C#中使用全局鼠标、键盘Hook
  • 原文地址:https://www.cnblogs.com/ullio/p/14117316.html
Copyright © 2011-2022 走看看