• C. Binary String Reconstruction


    题意:考虑如下的过程。你有一个长度为n的二进制串w还有一个整数x。你构建了一个长度为n的二进制串s。二进制串s的第i个字符串的选择如下:
    1.如果(w_{i-x})存在并且等于1,那么(s_{i})则等于1。
    2.如果(w_{i+x})存在并且等于1,那么(s_{i})则等于1。
    3.如果前两种情况都不存在,那么(s_{i})则等于0。

    给出字符串s和整数x,构造字符串w。

    分析:规则告诉我们如果(s_{i})为1,那么(w_{i-x})(w_{i+x})(至少)一个为1。如果(s_{i})为0,那么(w_{i-x})(w_{i+x})都为0。那么我们先把w全都置为1,把要求是0的地方全都变成0。然后检测构造后的这个字符串是否满足要求。可以见代码。

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <vector>
    #include <algorithm>
    using namespace std;
    
    int main() {
       
        int t;
        cin >> t;
    
        while (t--)
        {
            string s;
            cin >> s;
            int x;
            cin >> x;
            int len = s.size();
            string res(len, '1');
    
            for (int i = 0; i < s.size(); ++i)
            {
                if (s[i] == '0' && i - x >= 0) res[i - x] = '0';
                if (s[i] == '0' && i + x < len) res[i + x] = '0';
            }
    
            bool f = true;
            for (int i = 0; i < len; ++i)
            {
                bool flag = false;
                //两个中至少一个为1
                if ((i - x) >= 0 && res[i - x] == '1') flag = true;
                if ((i + x) < len && res[i + x] == '1') flag = true;
    
                if (s[i] == '1')
                {
                    if (!flag)
                    {
                        f = false;
                        cout << -1 << endl;
                        break;
                    }
                }
            }
            if (f)
            {
                cout << res << endl;
            }
        }
    
        
        return 0;
    }
    
  • 相关阅读:
    如何使用参数给 Scrapy 爬虫增加属性
    如何正确在 PyCharm 中调试 Scrapy 爬虫?
    Chrome 开发者工具的最佳用法
    Chrome 开发者工具的各种骚技巧
    跨库数据备份还原、迁移工具
    意向锁
    十六进制

    lombok @Builder注解
    什么是强引用、软引用、弱引用、虚引用?
  • 原文地址:https://www.cnblogs.com/pixel-Teee/p/13573865.html
Copyright © 2020-2023  润新知