#include<iostream> #include<cmath> #define lson l,mid,root<<1 #define rson mid+1,r,root<<1|1 #define ll long long constintinf=0x3f3f3f3f; constintN=1000000+1; usingnamespacestd; intmain() { intn; stringa; cin>>n; cin>>a; boolflag=0; for(inti=0;i<n-1;i++) { if(...
[codeforces1234F]Yet Another Substring Reverse 题目链接 大致题意为将某个子串进行翻转后,使得不包含相同字符的字符子串长度最长。只能翻转一次或零次。 设一个子串的状态为包含字符的二进制。如子串为abacdabacd,则状态为0000000000000000111100000000000000001111。 根据分析可以得到,一个子串和另一个子串如果没有交集,则...
#include<iostream> #include<cstring> #include<algorithm> #include<cmath> using namespace std; typedef long long ll; int m[111][111]; const int maxn =1e5 + 10; int id[maxn]; int main() { int t; cin>>t; while(t--) { int n; cin>>n; string s; cin>>s; int cnt=0; int...
Codeforces Round #644 (Div. 3)A->H(H为进制+reverse) http://codeforces.com/contest/1360/problem/A 题意: 用最小正方形,容下两个相同矩形。 #include<iostream> #include<cstdio> #include<algorithm> #include<cstring> using namespace std; typedef long long ll; int main() { int ...
技术标签: codeforces codeforces题目传送门 B. Reverse Binary Strings 题目大意 给你一个01字符串,你每次可以选择一个连续的子串进行左右翻转 求将其翻转成0,1交替出现的字符串的最小操作次数 思路 显然每次翻转只能改变子串的两端的字符,所以每次翻转最多改变一个连续两个的1和一个连续的两个的0 即为每次操作...
B. String Modification reverse https://codeforces.com/contest/1316/problem/B 题意:给出一个序列,给出操作规则:让我们确定一个k值,然后翻转i,i+k-1,遍历完整个数组; 找出操作结束后字典序最小的序列的k值; 思路:在几遍演算之后可以发现,某一k值下的翻转,都是分成两部分序列,后面的序列移到前面,前面的...
{ vector<ll>v; ll n , m ; cin>>n>>m; string s; for(int i=1;i<=n;i++) { cin>>s; ll sum=0; for(int j=0;j<m;j++) sum=sum*2+s[j]-'0'; //从前往后来转十进制 v.push_back(sum); } ll all=1ll<<m; //2^m ll md=(all-1)/2; map<ll,ll>mp; for(int i...
#include<string> #include<cstdio> #include<algorithm> #include<vector> #include<cmath> #define ll long long #define maxn 2000000 using namespace std; ll a[maxn]; int n; ll sum[25][2]; void build(int dep,int L, int R) { if (dep == 0){ sum[dep][0] = sum[dep][1] =...
codeforces 首先我们发现,因为可以在任意地方翻转,所以最后的答案就是一个合法子串和他的补集的子集中个数和最大的那个 因此我们先枚举每一个合法状态,记录他的合法个数有几个。 然后我们从头枚举每一个状态,计算状态的子集中的最大个数。 这样我们最后只要枚举状态和补集,就能计算出真正的答案了 ...
string ans = s;intnow =0;for(inti =1; i <= k; i++) {for(intj = a[i]; j <= b[i]; j++){ now += cnt[j];//前缀和if(now &1) {//是奇数就翻转ans[j-1] = s[a[i]+b[i] - j-1]; } } } cout << ans; ...