【bitset+string+关闭流同步优化】Oleg and Little Ponies URAL - 2108

本文介绍了一种使用bitset和字符串结合的方法来解决特定的01串匹配问题,并提供了完整的代码实现。通过位运算和字符串操作,实现了快速查找并更新字符串的状态。

Think:
1知识点:【bitset+string+关闭流同步】
2题意:第1行输入n、m,第2行至第m+1行输入m对长度为n的01串bt[i][j],第m+2行输入长度为n的01串bi,进行下述步骤:
(1)寻找bt[i][0]使得bt[i][0]为bt串的“子串”(bt[i][0]&bi == bt[i][0]),查找不到则结束
(2)通过(1)已找到i,bi = bi | bt[i][1]
输出最后状态的bi即可
3解题思路:
(1)bitset枚举判断,string控制输出格式,关闭流同步加快数据读取、打印

vjudge题目链接

以下为Accepted代码

#include <bits/stdc++.h>

using namespace std;

int vis[4014];
bitset<1014> bt[4014][2], bi;

int main(){
  std::ios::sync_with_stdio(false);
  int n, m, i, j;
  while(cin >> n >> m){
    for(i = 0; i < m; i++){
      for(j = 0; j < 2; j++){
        cin >> bt[i][j];
      }
    }
    cin >> bi;
    memset(vis, 0, sizeof(vis));
    while(true){
      bool flag = false;
      for(i = 0; i < m; i++){
        if(vis[i]) continue;
        if((bi&bt[i][0]) == bt[i][0]){
          vis[i] = 1, flag = true;
          bi |= bt[i][1];
        }
      }
      if(!flag) break;
    }
    string st = bi.to_string();
    cout << st.substr(st.size()-n, st.size()) << endl;
  }
  return 0;
}
### C++ 中 `bitset` 转换为 `string` 的方法 在 C++ 中,`std::bitset` 提供了一个名为 `to_string()` 的成员函数来实现将其内部存储的二进制表示转换为字符串形式。此函数默认会将每一位上的值(0 或 1)依次拼接成一个标准库类型的 `std::string`。 以下是具体的说明以及代码示例: #### 默认方式:使用 `to_string()` 当调用无参数的 `to_string()` 函数时,它会按照每位的实际值生成对应的字符序列[^3]。 ```cpp #include <iostream> #include <bitset> int main() { std::bitset<8> b("11001010"); std::string str = b.to_string(); std::cout << "Bitset: " << b << std::endl; std::cout << "Converted String: " << str << std::endl; return 0; } ``` 运行以上程序的结果将是: ``` Bitset: 11001010 Converted String: 11001010 ``` #### 自定义映射:指定 '0' 和 '1' 替代符 如果希望自定义零和一的表现形式,则可以通过带两个模板参数的形式重载该函数[^1]。例如,在某些场景下可能需要用其他字符替代传统的 `'0'` 和 `'1'` 表现形式。 下面展示如何通过传递额外参数改变输出样式: ```cpp #include <iostream> #include <bitset> using namespace std; int main(){ const string str = "ynynyynnyn"; bitset<10> b(str, 0, string::npos, 'n', 'y'); cout << "Original Bitset: " << b << endl; // 使用特定字符替换原有表现形式 string convertedStr = b.to_string('a','b'); cout << "Customized Converted String (with 'a' and 'b'): " << convertedStr << endl; return 0; } ``` 执行这段脚本后可以看到如下输出: ``` Original Bitset: 1010100010 Customized Converted String (with 'a' and 'b'): bababaaaba ``` 此处值得注意的是,虽然最终得到的新串看起来像是随机组合而成,但实际上它是严格依据原始比特集状态构建出来的结果[^1]。 另外一种情况涉及到了更复杂的类型转换逻辑,比如从字节数组或者十六进制编码还原回 ASCII 字符串等情况下的处理[^4]。这类需求通常超出单纯依靠内置功能所能解决范围之外,往往还需要借助第三方工具包或是手动编写辅助算法才能达成目标效果。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值