标签:可能性 二次 image ace 取值 元组 字符串 sync space
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=4060
题意:
给出两个 $0,1$ 字符串 $S,T$,现在你有两次对 $S$ 作区间翻转($0 \rightarrow 1,1 \rightarrow 0$)的操作,
用四元组 $(l_1,r_1,l_2,r_2)$ 表示,代表第一次翻转区间 $[l_1,r_1]$,第二次翻转区间 $[l_2,r_2]$。
问你有多少个四元组可以使得 $S=T$。
题解:
把 $S$ 尽可能少地分割成若干个子串。若某一子串和相应区间的 $T$ 一样,记作 $B$;反之,则记作 $A$。
因此若 $A$ 的数量大于两个,就不可能通过区间翻转两次使得 $S=T$,因此 $A$ 最多是两个。
分类讨论:
AC代码:
#include<bits/stdc++.h> using namespace std; int n; string s,t; int main() { ios::sync_with_stdio(0); cin.tie(0); int T; cin>>T; while(T--) { cin>>n>>s>>t; int cnt=0; for(int i=0;i<n;i++) { if((i==0 || s[i-1]==t[i-1]) && s[i]!=t[i]) cnt++; } if(cnt>2) cout<<"0\n"; else if(cnt==2) cout<<"6\n"; else if(cnt==1) cout<<(2*n-2)<<‘\n‘; else cout<<((long long)n*(n+1)/2)<<‘\n‘; } }
ZOJ 4060 - Flippy Sequence - [思维题][2018 ACM-ICPC Asia Qingdao Regional Problem C]
标签:可能性 二次 image ace 取值 元组 字符串 sync space
原文地址:https://www.cnblogs.com/dilthey/p/9940927.html