学校网站资源库建设和资源上传,网站关键词被改,宏润建设集团网站,地方性手机平台微网站D. Two Strings Swaps 容易发现#xff0c;a[i], a[n-i1], b[i], b[n-i1] 可以互相交换#xff0c;且不会受其他地方影响#xff0c;关键在于对于这4个字符怎们计算最小的操作数#xff0c;讨论到死。。。看了别人的代码#xff0c;用不同的字符对数表示字符的组成#x… D. Two Strings Swaps 容易发现a[i], a[n-i1], b[i], b[n-i1] 可以互相交换且不会受其他地方影响关键在于对于这4个字符怎们计算最小的操作数讨论到死。。。看了别人的代码用不同的字符对数表示字符的组成就比较容易判断了。还不太清楚是如何想到的。。。只会写暴力枚举本质不同的这种正方形。。 #include bits/stdc.h
#define rep(i,a,b) for(int ia;ib;i)
typedef long long ll;
const int N 2e5 7;
using namespace std;
int n,ans,num[366];
char s1[N],s2[N];
int cal(string s1,string s2) {if(s1s2)return 0;if(s1[0]s1[1]s2[0]s2[1]) return 0;string ts1; ts2;int d0;for(int i0;i4;i)for(int j0;ji;j) if(t[i]!t[j])d;int ans0;if(d3) ans;else if(d5s1[0]s1[1]) ans2;else if(d5s1[0]!s1[1]) ans;else if(d6) ans2;return ans;
}
//int id[111],M[N];
//int ck(int a,int b,int c,int d) {
// memset(id,0,sizeof(id));
// int cc0;
// if(!id[a])id[a] cc;
// if(!id[b])id[b] cc;
// if(!id[c])id[c] cc;
// if(!id[d])id[d] cc;
// int t id[a]*10000 id[b]*1000 id[c]*100 id[d];
// return !M[t];
//}
//void biao(int a,int b,int c,int d) {
// memset(id,0,sizeof(id));
// int cc0;
// if(!id[a])id[a] cc;
// if(!id[b])id[b] cc;
// if(!id[c])id[c] cc;
// if(!id[d])id[d] cc;
//
// int t id[a]*10000 id[b]*1000 id[c]*100 id[d];
// M[t] 1;
//}
int main() {
// for(int i0;i4;i)
// for(int i10;i14;i1)
// for(int i20;i24;i2)
// for(int i30;i34;i3) {
// if(ck(i,i1,i2,i3)){
// printf(%d %d\n,i,i1);
// printf(%d %d\n\n,i2,i3);
// biao(i,i1,i2,i3);
// }
// }scanf(%d,n);scanf( %s,s11);scanf( %s,s21);if(n%20) {for(int i1;in/2;i) {int p n - i 1;string t1,t2;t1s1[i];t1s1[p];t2s2[i];t2s2[p];sort(t1.begin(),t1.end());sort(t2.begin(),t2.end());ans cal(t1,t2);}}else {for(int i1;in/2;i) {int p n - i 1;string t1,t2;t1s1[i];t1s1[p];t2s2[i];t2s2[p];sort(t1.begin(),t1.end());sort(t2.begin(),t2.end());ans cal(t1,t2);}if(s1[n/21]!s2[n/21])ans;}printf(%d\n,ans);return 0;
}转载于:https://www.cnblogs.com/RRRR-wys/p/9321287.html