Codeforces Round #663 (Div. 2) A~D

目录

A. Suborrays (思维)

B. Fix You(思维)

C. Cyclic Permutations(思维,排列组合)

D. 505(DP,前缀和) 


A. Suborrays (思维)

Codeforces Round #663 (Div. 2) A~D_第1张图片

 思路:
线性输出就行了;

#include 
using namespace std;
int a[100010];
int main()
{
	int t;
	cin >>t;
	while(t--)
	{
		int n;
		cin >>n;
		for(int i=1;i<=n;i++) cout <

B. Fix You(思维)

Codeforces Round #663 (Div. 2) A~D_第2张图片

 思路:

对于1~n-1行的任意一个位置来说,只要第i行的最后一个位置是D就行;

对于第n行来说,除了最后一个位置,其他必须是R;

只有满足上面两个条件,才可;

#include 
using namespace std;
int main()
{
	int t;
	cin >>t;
	while(t--)
	{
		int n,m;
		cin >>n>>m;
		int ans=0;
		for(int i=0;i>s+1;
			//cout <

C. Cyclic Permutations(思维,排列组合)

Codeforces Round #663 (Div. 2) A~D_第3张图片

 思路:

首先,如果出现环的情况下,必定序列中出现了 ‘ V ’ 型峰;(由于合法序列太难构造,那就构造不合法的)那么构不成环的序列有以下几种情况:

  • 只有一个 ‘ Λ ’型峰
  • 单调递增
  • 单调递减

 怎样构造这几种情况呢;首先把 n 挑出来,剩下n-1个数,从大到小,依次选择放在n的左侧还是右侧;这样能直接构造出来上述三种情况;由于n-1个数,每个数有两个位置可以挑选,那么总共的不合法摆放方案数是2^{n-1};

最初总数量是n!,减去2^{n-1}就是合法的序列方案数;

  • n! -  2^{n-1}
#include 
using namespace std;
const int mod=1e9+7;
typedef long long ll;
int main()
{
	int n;
	cin >>n;
	ll res=1;
	ll p=1;
	for(ll i=1;i<=n;i++) res=res*i%mod,p=p*(i==n?1:2)%mod;
	cout <<(res+mod-p+mod)%mod<

D. 505(DP,前缀和) 

Codeforces Round #663 (Div. 2) A~D_第4张图片

思路:

大致题意就是,给你一个二进制矩阵,如果他的任何一个偶数矩阵(  2x2 , 4x4 , 6x6  ...)里面含有的1的个数都是奇数,那么这个矩阵就是合法的;现在你可以执行一个操作任意次:任意取一个位置的数,进行取反;

然后,求要把这个矩阵变成合法矩阵,至少需要操作多少次,如果永远无法变成合法矩阵,输出-1;

首先可以确定当  n  \geq3 (行数) 时,必定存在 4x4 的矩阵不符合题意;因为,4x4 矩阵的四个顶点上的 2x2 矩阵 如果合法的话,那么加起来必定是偶数个 1 ;所以 n  \geq3 (行数)时,直接pass;(如下图)

Codeforces Round #663 (Div. 2) A~D_第5张图片

然后就是对于n==2和n==3的情况进行枚举了,枚举第一列的情况,然后,后面第j列每次判断和前面的一列组成2x2的矩阵是否合法,如果不合法则改变这一列的值;注意,n==2和n==3要分开来算;

处理每一个状态的过程中,记录最小值即可;

#include 
using namespace std;
const int N=1e6+7;
typedef long long ll;
int dp[3][N],mx[3][N];
int main()
{
	int n,m,ans=0x3f3f3f3f;
	char c;
	cin >>n>>m;
	for(int i=0;i>c;
			if(i<3) mx[i][j]=c-'0';
		}
	if(n==1) cout <<0,exit(0);
	if(n>3) cout <<-1,exit(0);
	for(int i=0;i<(1<>j&1;
			res+=mx[j][0]==dp[j][0]?0:1;
		}
		for(int j=1;j

 

你可能感兴趣的:(#,线性DP,#,前缀和,思维)