当前位置: 代码迷 >> 综合 >> A. Remainder(字符串问题) Codeforces Round #560 (Div. 3)
  详细解决方案

A. Remainder(字符串问题) Codeforces Round #560 (Div. 3)

热度:30   发布时间:2024-02-10 05:40:23.0

原题链接: https://codeforces.com/problemset/problem/1165/A
在这里插入图片描述
样例:

Input
11 5 2
11010100101
Output
1
Input
11 5 1
11010100101
Output
3

题意: 给你一个二进制字符串,你可以进行修改操作。你需要使这个二进制字符串的值对于给定的 x x y y 1 0 x 10^x 取模之后的值为 1 0 y 10^y ,问你最少需要进行多少次修改操作。

解题思路: 这个题目我们不能真的去取模,而是分析一下对 1 0 x 10^x 取模余下的是什么,什么会被消去。即把 1 0 x 10^x 也展成二进制字符串,那么不小于第 x + 1 x+1 位的全部都会被消去,而剩下的就是在低于第 x + 1 x+1 的二进制,而我们如果想得到最后的值为 1 0 y 10^y 即剩余的二进制字符串要与 1 0 y 10^y 的二进制字符串相同,故我们统计我们要修改的即可

AC代码:

/* *邮箱:unique_powerhouse@qq.com *blog:https://me.csdn.net/hzf0701 *注:文章若有任何问题请私信我或评论区留言,谢谢支持。 * */
#include<bits/stdc++.h> //POJ不支持#define rep(i,a,n) for (int i=a;i<=n;i++)//i为循环变量,a为初始值,n为界限值,递增
#define per(i,a,n) for (int i=a;i>=n;i--)//i为循环变量, a为初始值,n为界限值,递减。
#define pb push_back
#define IOS ios::sync_with_stdio(false);cin.tie(0); cout.tie(0)
#define fi first
#define se second
#define mp make_pairusing namespace std;const int inf = 0x3f3f3f3f;//无穷大
const int maxn = 1e5;//最大值。
typedef long long ll;
typedef long double ld;
typedef pair<ll, ll>  pll;
typedef pair<int, int> pii;
//*******************************分割线,以上为自定义代码模板***************************************//int main(){//freopen("in.txt", "r", stdin);//提交的时候要注释掉IOS;int n,x,y;string str;while(cin>>n>>x>>y){cin>>str;int sum=0;if(str[n-y-1]!='1')sum++;for(int i=n-1;i>n-x-1;i--){if(i!=n-y-1){if(str[i]!='0')sum++;}}cout<<sum<<endl;}return 0;
}
  相关解决方案