Codeforces Round 869 (Div. 2) A-C

A. Politics

思路

与第 1 个人的意见不同的人都要删除

代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int T;
	cin>>T;
	while(T--)
	{
		int n,m;
		cin>>n>>m;
		
		string t[n];
		
		int res=n;
		for(int i=0;i<n;i++)
		{
			cin>>t[i];
			if(t[i]!=t[0])res--;
		}
		cout<<res<<endl;
	}
	
	return 0;
}

B. Indivisible

题意

能否构造一个排列 p=[a1,a2,,an] ,使得对于任何 1l<rnsum=al+al+1++ar ,都有 sum 不能被 rl+1 整除,即 sum%(rl+1)0

思路

  • n=1 时,p=[1]
  • n 为其他奇数时,有 n(n+1)2%n=0 ,不能构造出这样的排列
  • n 为偶数时,可以构造 [2,1,4,3n,n1] 这样的一个奇偶相间的排列,证明如下:
    • lr 奇偶性不同时,sum=(rl+1)(l+r)2 ,因为 (l+r)%20,所以 gcd((rl+1)(l+r)2,rl+1)=(rl+1)2,即 sum%(rl+1)0
    • lr 奇偶性相同时,
      • lr 都为偶数时,sum=(rl+1)(l+r)21sum%(rl+1)=10
      • lr 都为奇数时,sum=(rl+1)(l+r)2+1sum%(rl+1)=10

代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int T;
	cin>>T;
	while(T--)
	{
		
		int n;
		cin>>n;
		if(n==1)
		{
			puts("1");
			continue;
		}
		
		if(n%2==1)
		{
			puts("-1");
			continue;
		}
		
		for(int i=1,j=2;j<=n;j+=2,i+=2)
			cout<<j<<' '<<i<<' ';
		
		puts("");
	}
	
	return 0;
}

C. Almost Increasing Subsequence

题意

定义一个序列为 almostincreasing ,当序列中不包含三个连续的元素 x,y,z ,并且 xyz ,询问区间 [l,r] 中,满足条件的序列最长的长度是多少

思路

对于产生冲突的区间 [ai2,ai1,ai] ,都由 ai唯一确定,对于每个查询,用区间总长度 rl+1 减去区间内冲突点的个数 s[r]s[l+1] 即可

代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int n,k;
	cin>>n>>k;
	
	vector<int>a(n+1);
	vector<int>s(n+1);
	
	for(int i=1;i<=n;i++)
		cin>>a[i];
	
	for(int i=2;i<=n-1;i++)
		if(a[i-1]>=a[i]&&a[i]>=a[i+1])
			s[i]=s[i-1]+1;
		else s[i]=s[i-1];
	
	
	while(k--)
	{
		int l,r;
		cin>>l>>r;
		
		int len=r-l+1;
		if(len<=2)cout<<len<<endl;
		else cout<<len-(s[r-1]-s[l])<<endl;
	}

	
	return 0;
}
posted @   风雨zzm  阅读(94)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
点击右上角即可分享
微信分享提示