原题链接: https://codeforces.com/problemset/problem/1165/A
样例:
Input
11 5 2
11010100101
Output
1
Input
11 5 1
11010100101
Output
3
题意: 给你一个二进制字符串,你可以进行修改操作。你需要使这个二进制字符串的值对于给定的和
对
取模之后的值为
,问你最少需要进行多少次修改操作。
解题思路: 这个题目我们不能真的去取模,而是分析一下对取模余下的是什么,什么会被消去。即把
也展成二进制字符串,那么不小于第
位的全部都会被消去,而剩下的就是在低于第
的二进制,而我们如果想得到最后的值为
,即剩余的二进制字符串要与
的二进制字符串相同,故我们统计我们要修改的即可。
AC代码:
/
*
*/
//POJ不支持
//i为循环变量,a为初始值,n为界限值,递增
//i为循环变量, a为初始值,n为界限值,递减。
using 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;
}