题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=5821
https://vjudge.net/contest/180311#problem/J
题意:
给定数组a和数组b,长度为n,给定m组数据,每组数据两个数L和R ,代表从1开始计数的这两个数组的第L号位置到第R号位置期间的数可以重新排列,问经过m次的随机打乱可否由a数组变为b数组。
(观众:你 tm 这叫什么叙述,你高中上过语文课嘛!你怎么一点数学素养都没有。)
没看懂题意的可以参考这篇博客,捂脸逃
思路:
看了题解才明白,其实就是对于每次输入的数字,记录下在b数组里的位置,把每次的【L,R】的数字按照位置排序,就好啦。
嘛,哭晕在厕所。
两个致命错误:
1.没有彻底搞懂(说的好像你现在彻底搞懂了一样!)结构体的一些基本原理。
以 a[5].4 作为数字5在b数组的4号位的方式来存储,果断WA。
2.记录过的数字就不记录了,其实应该顺序记录,无论出没出现过都要记录。
6 1
1 4 4 0 3 2
0 4 2 4 1 3
× ×...
这种情况把数字 4 的位置都存为 2 就麻烦了。
改掉之后和AC代码对拍发现都对就是WA,WA两天后发现YES -> Yes
附:多校题解
上代码:
#include<cstdio>
#include<cstring>
#include <iostream>
#include <algorithm>
using namespace std;
#define N 1005
int b[N];
struct Node
{
int x;
int p;
int ps;
} a[N];
int n;
int m;
int t;
bool compare(Node a,Node b)
{
return a.p < b.p;
}
int main()
{
int R = 0;
// freopen("data.txt", "r", stdin);
// freopen("outWA.txt", "w", stdout);
scanf("%d", &t);
while(t --)
{
int T;
memset(a, 0, sizeof(a));
memset(b, 0, sizeof(b));