zoukankan      html  css  js  c++  java
  • V

    天哪!!菜到家啦。

    数学+思维。

    首先求出一个周期内cnt0-cnt1=c的个数,如果C=0,那么只要在一个周期内有前缀等于x,那么答案就是-1,否则答案就是0

    如果C!=0,列一下方程x=t*c+a.即x-a=t*c。,要求t为大于等于0的整数,也就是我们的判断条件。。。。唉。

    #include<bits/stdc++.h>
    using namespace std;
    void solve()
    {
        int cnt1=0,cnt0=0;
        int n,x;
        cin>>n>>x;
        int ans=0;
        if(x==0) ans++;
        string s;
        cin>>s;
        for(int i=0;i<n;i++){
            if(s[i]=='0') cnt0++;
            else cnt1++;
        }
        int c=cnt0-cnt1;
        if(c==0){
            if(x==0){
                cout<<-1<<endl;
                return ;
            }
            else {
                cnt1=0;
                cnt0=0;
                for(int i=0;i<n;i++){
                    if(s[i]=='1') cnt1++;
                    else cnt0++;
                    if(cnt0-cnt1==x) ans++;
                }
                if(ans>0) cout<<-1<<endl;
                else cout<<0<<endl;
            }
        }
        else {
            cnt0=0;
            cnt1=0;
            for(int i=0;i<n;i++){
                if(s[i]=='1') {
                   cnt1++;
                }
                else cnt0++;
                int a=cnt0-cnt1;
                if((x-a)%c==0&&(x-a)/c>=0) ans++;
            }
            cout<<ans<<endl;
    
        }
    
        return ;
    }
    
    
    int main()
    {
        int t;
        cin>>t;
        while(t--) solve();
        return 0;
    }
  • 相关阅读:
    three.js 制作一个三维的推箱子游戏
    three.js 郭先生制作太阳系
    three.js 制作魔方
    three.js 欧拉角和四元数
    mysql
    重装系统后需要安装的软件
    python3.7 安装PyQt5
    Java读取文件
    linux 环境jdk安装
    linux 修改用户字符集
  • 原文地址:https://www.cnblogs.com/Accepting/p/12243831.html
Copyright © 2011-2022 走看看