DongDong破密码
作者:互联网
链接:https://ac.nowcoder.com/acm/contest/11691/A
来源:牛客网
题目描述
DongDong是一个喜欢密码学的女孩子,她养的萨摩耶叼着一张带着加密信息的纸条交给了她,如果她不能破解这张密码,萨摩耶是不会高兴的。
给定n,m,给出长度为n的01串,每次向后移动一位,移动m-1次,最后求出这n+m-1位每一位的异或值(00=0,11=0,0^1=1)成为密码。(如下图这样,此时n=6,m=3)
输入描述:
第一行两个整数,n和m
第二行一个01串(共n+m-1位)
2<=n+m<=1000000
输出描述:
第一行输出答案:长度为n的01串(保证存在答案)
示例1
输入
复制
6 3
11010110
输出
复制
101010
说明
见题目描述
我们通过观察可以发现每个值是他下面的值异或得到的,于是我们就开始找是哪些值,于是我想到了拿一个队列保存哪些数,后面的时候,一直维持那么多个数在队列中,进来一个弹出一个,但是这样的话会超时,于是我们可以用一个数来维持那个数,每次再异或上将要弹出去的那个数即可
防止胡乱输出,我们每次只需要输出得是n个数
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <set>
#include <string>
#include <queue>
#include <map>
#include <stack>
#include <map>
#include <unordered_map>
#include <vector>
#include <cmath>
//#include <ext/rope>
#include <bits/stdc++.h>
using namespace std;
#define gt(x) x = read()
#define int long long
#define ios ios::sync_with_stdio(false), cin.tie(0), cout.tie(0)
//#define x first
//#define y second
//int dx[4] = {0, 1, 0, -1};
//int dy[4] = {1, 0, -1, 0};
//typedef __int128 INT;
typedef pair<double, int> PDI;
typedef pair<int, int> PII;
typedef unsigned long long ULL;
inline int read(int out = 0)
{
char c;
while((c=getchar()) < 48 || c > 57);
while(c >= 48 && c <= 57) out=out*10+c-48,c=getchar();
return out;
}
const int N = 2e6 + 10;
const int M = 2e7 + 10;
const int mod = 1e9 + 7;
const int PP = 13331;
const int inf = 0x3f3f3f3f;
const int INF = 0x3f3f3f3f3f3f3f3f;
const double eps = 1e-10;
const double PI = acos(-1);
int ans[N];
signed main(){
int n, m;
string str;
scanf("%lld%lld", &n, &m);
cin >> str;
if (m == 0){
cout << str << endl;
}
else if (n == 0){
// cout << endl;
}
else{
ans[0] = (str[0] - '0');
// cout << ans[0];
int last = (str[0] - '0');
for (int i = 1; i <= m - 2; i ++){
ans[i] = ((str[i] - '0'));
ans[i] ^= last;
// cout << ans[i];
last ^= ans[i];
}
for (int i = m - 1; i <= n - 1 ; i ++){
ans[i] = (str[i] - '0');
ans[i] ^= last;
// cout << ans[i];
last ^= ans[i];
last ^= (ans[i - m + 1]);
}
for (int i = 0; i < n; i ++) cout << ans[i];
cout << endl;
}
return 0;
}
标签:DongDong,cout,int,密码,str,ans,include,define 来源: https://blog.csdn.net/qq_45772483/article/details/113186458