zoukankan      html  css  js  c++  java
  • Codeforces Round #648 (Div. 2) F. Swaps Again

    题目链接:F、Swaps Again

    题意:

     有两个长度为n的数组a和数组b,可以选择k(1<=k<=n/2)交换某一个数组的前缀k和后缀k,可以交换任意次数,看最后是否能使两个数组相等

    可以输出yes,否则输出no

    题解:

    。。。这道题我真没想到这样写

    例如一个序列1,2,3,4,5.你交换一次(怎么交换就不说了,能看出来),5,2,3,4,1,再交换一次4,1,3,5,2.

    你会发现一个规律(反正我没发现),对称位置的元素依然是最开始的元素,就比如没交换前1和5相对称,再交换了多次之后1还是和5处于对称位置

    那么如果b序列可以通过a序列交换得到,那么肯定某个数的对应元素肯定在两个数组中都一样

    STL中pair容器的用法

    代码:

     1 #include<stdio.h>
     2 #include<algorithm>
     3 #include<iostream>
     4 #include<string>
     5 #include<queue>
     6 #include<deque>
     7 #include<string.h>
     8 #include<map>
     9 #include <iostream>
    10 #include <math.h>
    11 using namespace std;
    12 typedef long long ll;
    13 const int maxn=500+10;
    14 int a[maxn],b[maxn];
    15 pair<int,int> p1[maxn],p2[maxn];
    16 int main()
    17 {
    18     int t;
    19     scanf("%d",&t);
    20     while(t--)
    21     {
    22         int n;
    23         memset(p1,0,sizeof(p1));
    24         memset(p2,0,sizeof(p2));
    25         bool flag=0;
    26         scanf("%d",&n);
    27         for(int i=1; i<=n; i++)
    28         {
    29             scanf("%d",&a[i]);
    30         }
    31         for(int i=1; i<=n; i++)
    32         {
    33             scanf("%d",&b[i]);
    34         }
    35         if(n%2==1&&a[n/2+1]!=b[n/2+1]) //中间这位不能变
    36         {
    37             flag=1;
    38         }
    39         for(int i=1; i<=n/2; i++)
    40         {
    41             p1[i]= {max(a[i],a[n-i+1]),min(a[i],a[n-i+1])};
    42             p2[i]= {max(b[i],b[n-i+1]),min(b[i],b[n-i+1])};
    43         }
    44         sort(p1+1,p1+1+n/2);
    45         sort(p2+1,p2+1+n/2);
    46         for(int i=1; i<=n/2; i++)
    47         {
    48             if(p1[i]!=p2[i])
    49             {
    50                 flag=1;
    51             }
    52         }
    53         if(flag==0)
    54         {
    55             printf("yes
    ");
    56         }
    57         else
    58         {
    59             printf("no
    ");
    60         }
    61     }
    62     return 0;
    63 }
  • 相关阅读:
    hadoop 3.0.0 alpha3 安装、配置
    集群使用初步
    转 mysql 中sql 语句查询今天、昨天、7天、近30天、本月、上一月 数据
    java 内存溢出
    获取手机上安装的应用信息
    使apk具有system权限
    Android基础之sqlite 数据库简单操作
    转 Android:文件下载和写入SD卡学习小结
    Android判断Service是否运行
    Android 定时重复启动弹出窗口。
  • 原文地址:https://www.cnblogs.com/kongbursi-2292702937/p/13306382.html
Copyright © 2011-2022 走看看