A - CQXYM Count Permutations
题意:
给定n,表示一个长度为2n的数组,数组内部的元素为1~2n的数字且不重复,求该数组全排列时数组中有n对a[i]<a[i+1]。求这样的排列有多少个?
做法:
2n个数全排列一共有2n!种情况,因为是全排列,具有对称性!,所以满足条件的排列情况恰好是一半,也就是2n!/2,但是该题中数据范围太大了,求2n!的时候我们得保证不会炸范围,所以在算的过程中就得进行取模,其次/2这个因为求阶乘时有2出现就直接抵消了,所以循环从3开始。
#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
const ll mod=1e9+7;
int t,n,m,k;
string s;
int main()
{
ios::sync_with_stdio(false);
int t,n;
cin>>t;
while(t--)
{
cin>>n;
ll sum=1;
for(int i=3;i<=2*n;i++)
sum=sum*i%mod;
cout<<sum<<endl;
}
return 0;
}
B - Diameter of Graph
题意:
给定一个无向图的点,总边数以及最长的长度(任意两点之间的边不得大于这个长度)问能否构成一个无重复边且没有内部环的存在的图
做法:
只知道一点浅薄图的知识,首先构成图最多的边数是(n*(n-1))/2,最少也得是n-1,所以我们就可以排除两种种情况
输出NO的情况:1、m>n*(n-1))/2 2、m<n-1 3、k<=1 (当直径<=1时,除非你是一个点否则根本满足不了条件) 4、k==2时只满足三点且两边的情况 5、k>=3时只有m=(n*(n-1))/2时才满足
以及一个特判的YES情况:n==1且m==0;
但是我WA了。。。不知道为啥
C - Portal
题意:
构造MC的地狱传送门(MC大佬??)由01组成的矩阵,要求边界必须为1(不包含顶点),且必须是行数>5,列数>4,中间部分必须为0,四个顶点随意,你可以进行的操作就是01反转,问最少几次操作后,你就能构造出一个子矩阵满足条件
思路:
我表示。。。我的菜鸡想法是暴力跑这个矩阵就完了,边界的直接变,然后边界到了,就直接内部清1,但是这个一定会炸。。而且感觉必WA,推荐大佬的博客,虽然我不太明白但是他写的是真的好。
链接:Codeforces Round #745 (Div. 2) A~D - 知乎
D - Mathematics Curriculum
题意:
对于 (1,2,3,...n) 的某个排列,取其中某个数 x ,考虑所有包含 x 的一段。若这些段的最大值的集合中,恰好含有 个元素,则称
是“好”的。
给定n,m,k,求满足以下条件的排列的个数:
恰有k个数是“好”的。
(转载至:Codeforces Round #745 (Div. 2) A~D - 知乎)(我是真看不懂。。。QAQ)
思路:
我推荐直接楼上,但是我还是得写一手
三阶DP,加油,dalao们!