wxy 2.24 #7 NCPC2012

v>

wxy 2.24 #7 NCPC2012
一开始先看了B了,花了一个小时心态也炸了,。。。,
H
心态炸了之后就不太稳了,就是一个bfs和一个逻辑上的思维
只要按照bfs遍历,然后搞清楚,只有之前没有遍历到的才要修改值,否者再修改会变大。再有可以再
inf的基础上+1,对后面结果没有映像,因为月前面加的越少,而且遍历也是按照id从小到大遍历的,如
果相同取的也是小的那个
C
priority_queue<int,vector,less > 大顶堆
priority_queue<int,vector,greater >小顶堆
通过大顶堆和小顶堆可以把前一半放到大顶堆里面,后一半放到小顶堆里面,可以进行中位数操作。
分别进行n次排序,优先队列和sort的复杂度分别为 nlogn n^2logn
J
敢想敢做吧,过的是比较少,但是只是考察了一个贪心
B
联系逆序对和轮换圈数(虽然不知道为什么),ACM是需要想象力的吧
状态转换联想到逆序奇偶性
# include <bits/stdc++.h>
using namespace std;
int n;
int a[100002], b[100002];
int work[100002];
int cyc(int *a)
{
int cnt=0;
for(int i = 1; i <= n; i++) work[i]=1;
for(int i = 1; i <= n; i++)
{
if(work[i])
{
cnt++;
work[i]=0;
for(int j = a[i]; j != i; j = a[j]) work[j]=0;
}
}
return cnt;
}
int main()
{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]);
cout<<cyc(a)<<" "<<cyc(b)<<endl;
if((cyc(a)-cyc(b))%2==0) puts("Possible");
else puts("Impossible");
return 0;
}
/*
4
1 3 4 2
4 3 2 1
7
1 2 3 4 5 6 7
6 5 7 1 3 4 2
*/
posted @ 2022-02-27 00:16  fengzlj  阅读(43)  评论(0)    收藏  举报