zoukankan      html  css  js  c++  java
  • CF1365F Swaps Again(思维)

    题意:

    给出两串序列a和b,每次操作可以选择其中一串序列,把它的前k个元素和最后k个元素交换,k<=n/2,询问是否有可能使得两个序列相等。

    题解:

    思考之后可以想到,数组中原来下标和为n+1的二元组,无论怎么交换,下标和永远是n+1。根据这个性质,可以提取出这些二元组,看看能不能完全匹配。

    #include<bits/stdc++.h>
    using namespace std;
    const int maxn=505;
    int t,n;
    int a[maxn];
    int b[maxn];
    int visit[maxn];//标记二元组是否被使用 
    int main () {
        scanf("%d",&t);
        while (t--) {
            scanf("%d",&n);
            for (int i=1;i<=n;i++) scanf("%d",&a[i]);
            for (int i=1;i<=n;i++) scanf("%d",&b[i]),visit[i]=0;
            int f=1;
            for (int i=1;i<=n/2;i++) {
                int x=a[i];
                int y=a[n-i+1];
                f=0;
                for (int j=1;j<=n/2;j++) {
                    if (visit[j]) continue;
                    if ((b[j]==x&&b[n+1-j]==y)||(b[j]==y&&b[n+1-j]==x)) {
                        visit[j]=1;
                        f=1;
                        break;
                    }
                }
                if (!f) break;
            } 
            if (n%2==1&&a[n/2+1]!=b[n/2+1]) f=0;
            if (f)
                printf("yes
    ");
            else
                printf("no
    ");
        }
    } 
  • 相关阅读:
    第四章:(2)原理之 Dubbo 框架设计
    大三学习进度29
    大三学习进度27
    大三学习进度31
    大三学习进度24
    大三学习进度29
    大三学习进度26
    大三学习进度28
    大三学习进度25
    大三学习进度32
  • 原文地址:https://www.cnblogs.com/zhanglichen/p/13093035.html
Copyright © 2011-2022 走看看