Codeforces Round #804 div.2(abc)

The Third Three Number Problem:

题意:
给你一个n,让你求满足请添加图片描述的a,b,c

  • 显然任意a,b,c是不可能得到奇数
  • 只考虑偶数可以得到一个特殊构造 n/2 , 0 , 0
    代码如下:
#include<bits/stdc++.h>
using namespace std;
#define endl '\n'
int n;
int t;
void solve()
{
	if(n%2)
	  cout<<-1;
	else
	  cout<<"0 0 "<<n/2;
	cout<<endl;
}
int main()
{
	cin>>t;
	while(t--)
	{
		cin>>n;
		solve();
	}
	return 0;
 } 

B - Almost Ternary Matrix

题意:构造01矩阵,要求没个位置的相邻位置(上,下,左,右)有且只有2个相同。

将该图形作为基本单位进行扩展
在这里插入图片描述
代码

#include<bits/stdc++.h>
using namespace std;
int t;
int n,m;
const int N=60;
int e[N][N];
int main()
{
	cin>>t;
	e[1][1]=1,e[1][4]=1,e[4][1]=1,e[4][4]=1;
	e[2][2]=1,e[2][3]=1,e[3][2]=1,e[3][3]=1;
	while(t--) 
	{
		cin>>n>>m;
		for(int i=1;i<=n;i++)
		{
			for(int j=1;j<=m;j++)
			{
				int tx=i%4;
				if(!tx)
				  tx=4;
				int ty=j%4;
				if(!ty)
				  ty=4;
				e[i][j]=e[tx][ty];
			}
		}
		for(int i=1;i<=n;i++)
		{
			for(int j=1;j<=m;j++)
			  cout<<e[i][j]<<" ";
			cout<<endl;
		}
	}
	return 0;
}

**

C - The Third Problem

**
题意:给定一个数组,内容是0~n-1,定义集合MEX{a1,a2,a3,…,an}为:该集合中没有出现的最小非负整数。
求一个整数集合bn,内容也是0~n-1,对任意[l,r]都有 MEX{al,al+1,al+2…br}=MEX{bl,bl+1,bl+2,…br};
解:
设F[i]:数i出现的位置
设是F[x]为 x 在a 中的位置
首先考虑0的位置,因为MEX[0]=1,所以0的位置只能是F[0],可以确定1的位置为s[1]。
接下来确定 2~n-1的方法相同,以 0 和 1 的索引确定区间 [L, R],如果下一个 数x 的索在入区间 [L, R],则更新ans为((区间长度)-(x-1))*ans, 如果 k 的索引位于区间之外则更新L或R增加区间长度。
代码:

#include<bits/stdc++.h>
using namespace std;
int t;
int n;
const int N=1e5+11;
typedef long long ll;
const int mod=1e9+7;
int e[N];
int f[N];
void solve()
{
	int l=f[0],r=f[0];
	ll ans=1;
    for(int i=1;i<n;i++)
    {
    	if(f[i]>r)
    	  r=f[i];
    	else if(f[i]<l)
    		l=f[i];
    	else 
    	  ans=ans*(r-l+1-i)%mod;
	}
	cout<<ans<<endl;
	
}
int main()
{
	cin>>t;
	while(t--)
	{
		cin>>n;
		for(int i=0;i<n;i++)
		{
			cin>>e[i];
			f[e[i]]=i;
		}
		solve();
	}
	
}

mood:
请添加图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dai _ tu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值