hdu多校第四场 1007 (hdu6620) Just an Old Puzzle 逆序对

题意:

给你一个数字拼图,问你数字拼图能否能复原成原来的样子。

题解:

数字拼图的性质是,逆序数奇偶相同时,可以互相转化,逆序数奇偶不同,不能互相转化。

因此统计逆序对即可。

#include<iostream>
using namespace std;
int main(){
    int t;
    scanf("%d",&t);
    while(t--){
        int a[20];
        int kg;
        for(int i=1;i<=16;i++){
            scanf("%d",&a[i]);
            if(a[i]==0)kg=i;
        }
        while(kg%4){
            swap(a[kg],a[kg+1]);
            kg++;
        }
        while(kg%16){
            swap(a[kg],a[kg+4]);
            kg+=4;
        }
        int nxd=0;
        for(int i=1;i<15;i++){
            for(int j=i+1;j<=15;j++){
                if(a[j]<a[i])nxd++;
            }
        }
        if(nxd%2==0)printf("Yes\n");
        else printf("No\n");
    }
    return 0;
}

原文地址:https://www.cnblogs.com/isakovsky/p/11279830.html

时间: 2024-10-09 15:12:19

hdu多校第四场 1007 (hdu6620) Just an Old Puzzle 逆序对的相关文章

hdu多校第三场 1007 (hdu6609) Find the answer 线段树

题意: 给定一组数,共n个,第i次把第i个数扔进来,要求你删掉前i-1个数中的一些(不许删掉刚加进来这个数),使得前i个数相加的和小于m.问你对于每个i,最少需要删掉几个数字. 题解: 肯定是优先删大数,一开始想的方法类似于尺取,就是维护一个大顶堆作为现有的数,小顶堆作为要删的数,每次大顶堆的元素总和大于m了,就把堆顶扔进小顶堆,扔完了,再把小顶堆的堆顶扔回大顶堆,在会导致大顶堆值总和大于m时停止. 但是很容易会被1 1 1 1 1 1 1 1 1 1 100 这样的数据卡掉. 然后想到了,维护

hdu多校第四场1001 (hdu6614) AND Minimum Spanning Tree 签到

题意: 一个完全图,某两点边权为这两点编号之按位与,求最小生成树,输出字典序最小的. 题解: 如果点数不为$2^n-1$,则每一点均可找到一点,两点之间边权为0,只需找到该点二进制下其最左边的0是第几位,与此位为1,其他位都为0的点相连,此边边权为0. 否则,第$2^n-1$点以此法找到的最小点是$2^n$,此点不存在,则$2^n-1$只能与1相连,得到边权为1.其他边都是0,总共得生成树边权和为1. #include<iostream> using namespace std; int ma

hdu多校第五场1007 (hdu6630) permutation 2 dp

题意: 给你n个数,求如下限制条件下的排列数:1,第一位必须是x,2,最后一位必须是y,3,相邻两位之差小于等于2 题解: 如果x<y,那么考虑把整个数列翻转过来,减少讨论分支. 设dp[n]为限制1和n在两边,相邻的数之差小于等于2的排列方案. dp[0]=1 dp[1]=1 dp[2]=2 dp[3]=3 如果x==1 y==n 直接用公式dp[i]=dp[i-1]+dp[i-3]求解,将i代入为n-1-1. 如果x!=1 或者y!=n,假如对于12个的情况,x=4,y=9 那么,1,2,3

[hdu 4899]14年多校第四场C Hero meet devil 状压DP

Time Limit: 16000/8000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total Submission(s): 122    Accepted Submission(s): 49 Problem Description There is an old country and the king fell in love with a devil. The devil always asks th

2014多校第四场1005 || HDU 4901 The Romantic Hero (DP)

题目链接 题意 :给你一个数列,让你从中挑选一些数组成集合S,挑另外一些数组成集合T,要求是S中的每一个数在原序列中的下标要小于T中每一个数在原序列中下标.S中所有数按位异或后的值要与T中所有的数按位与的值相同,问能找出多少符合要求的组合. 思路 :比赛的时候有点没有头绪,后来二师兄想出了状态转移方程,YN又改了很多细节,最后才A的.总之是个别扭的DP..... 一开始是 _xor[i][j^a[i]] += _xor[i-1][j] :j 的下一个状态 就是异或上a[i],这个数组所代表的意思

2014 HDU多校弟五场J题 【矩阵乘积】

题意很简单,就是两个大矩阵相乘,然后求乘积. 用 Strassen算法 的话,当N的规模达到100左右就会StackOverFlow了 况且输入的数据范围可达到800,如果变量还不用全局变量的话连内存开辟都开不出来 1 #pragma comment(linker, "/STACK:16777216") 2 #include <iostream> 3 #include <stdio.h> 4 #define ll long long 5 using namesp

2014 HDU多校弟八场H题 【找规律把】

看了解题报告,发现看不懂 QAQ 比较简单的解释是这样的: 可以先暴力下达标,然后会发现当前数 和 上一个数 的差值是一个 固定值, 而且等于当前数与i(第i个数)的商, 于是没有规律的部分暴力解决,有规律的套公式 //#pragma comment(linker, "/STACK:16777216") //for c++ Compiler #include <stdio.h> #include <iostream> #include <cstring&g

2014 HDU多校弟九场I题 不会DP也能水出来的简单DP题

听了ZWK大大的思路,就立马1A了 思路是这样的: 算最小GPA的时候,首先每个科目分配到69分(不足的话直接输出GPA 2),然后FOR循环下来使REMAIN POINT减少,每个科目的上限加到100即可 算最大GPA的时候,首先每个科目分配到60分,然后FOR循环下来使REMAIN POINT减少,每个科目的上限加到85即可,如果还有REMAIN POINT,就FOR循环下来加到100上限即可 不会DP 阿 QAQ 过段时间得好好看DP了  =  = 于是默默的把这题标记为<水题集> //

2014 HDU多校弟五场A题 【归并排序求逆序对】

这题是2Y,第一次WA贡献给了没有long long 的答案QAQ 题意不难理解,解题方法不难. 先用归并排序求出原串中逆序对的个数然后拿来减去k即可,如果答案小于0,则取0 学习了归并排序求逆序对的方法,可以拿来当模板 TVT 贴代码了: 1 #include <stdio.h> 2 #include <string.h> 3 #include <stdlib.h> 4 #include <math.h> 5 #include <iostream&g