Codeforces Round 877(div.2) A-C

传送门

A. Blackboard List

题意:

给一个数组,这个数组是由其中的两个值通过 其差值的绝对值得到的。输出这两个值的其中一个

思路:

看样例,如果有负数,必然输出负数,因为后得到的只能是非负数。

否则,输出正数的最大值,因为它不可能通知别的两个数减出来;

代码:


void solve()
{
	cin>>n;
	int f=0;
	int mx=0;
for(int i=1;i<=n;i++) 
{
	cin>>a[i];
	mx=max(mx,a[i]);
	if(a[i]<0) f=a[i];
}

if(!f) 
    cout<<mx<<endl;
else
	cout<<f<<endl;
	

}

B. Minimize Permutation Subarrays

题意:

给一个数组,可以调换任意两个数的位置,求使得调换后 数组的子串是permutation数组的数量最少

思路:

让数量最少,看样例,即只有1 和本身。

怎么做到呢?如果是permutation数组,那肯定是 1 2 。。1是一定有的,那只要在 1 和 2之间放别的数,让1 2接不上,直到最后才能接上就行。即把n 插在1和2 中间。

所以本题就是找 1 2 n的位置 然后让n和中间的换一个即可。

代码:

int a[N],p[N];
//只要用 n 把 1和2隔开就可以使得子Permutation数组只有1和本身
// 输入中 1 2 n的关系可能有   1 2 n/ 1 n 2/2 1 n/2 n 1/n 1 2/n 2 1
// 只要找到n的位置和中间数字的位置互换即可
void solve()
{
	cin>>n;
	int t=0;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
		if(a[i]==1) p[++t]=i;
		else if(a[i]==2) p[++t]=i;
		else if(a[i]==n) p[++t]=i,k=i;
	}
	sort(p+1,p+4);
	cout<<p[2]<<" "<<k<<endl;
}

C. No Prime Differences

题意:

构造一个矩阵 使每个数和上下左右的数的差值都是质数。

思路:

为了不用思考四个方向,我们先按顺序排,先水平排列
    //1 2 3 4 5
    //6 7 8 9 10
    //11 12 13 14 15
    //16 17 18 19 20
    //上下相邻的差为5 不是质数 但多隔一个就是5*2 隔几个就是5*n 即只要隔着那差值一定不是质数
    //所以我们把行的顺序换一下 如果变成 1 11 6 16 会发现中间还是不行 6和11相邻
    //从0开始排 行 序号
    //只有 6 16 1 11可以 所以我们先排偶数列再排奇数列
    //如果先排偶数 那么偶数的最下面一列可能和奇数数的最上一列相邻
    //但先排奇数就不会 (因为n>=4)


void solve()
{
	cin>>n>>m;
	for(int i=1;i<n;i+=2)
	{
		for(int j=1;j<=m;j++)
			cout<<i*m+j<<" ";
	cout<<endl;
	}

	for(int i=0;i<n;i+=2)
	{
		for(int j=1;j<=m;j++)
			cout<<i*m+j<<" ";
		cout<<endl;
	}
	cout<<endl;
}

灵神yyds

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值