首页 > 其他分享 >Codeforces Round 869 (Div. 2) A-C

Codeforces Round 869 (Div. 2) A-C

时间:2023-05-01 16:13:52浏览次数:44  
标签:869 frac 题意 int sum cin Codeforces -- Div

目录

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=[a_1,a_2,…,a_n]\) ,使得对于任何 \(1≤l<r≤n\) ,\(sum=a_l+a_{l+1}+⋯+a_r\) ,都有 \(sum\) 不能被 \(r−l+1\) 整除,即 \(sum\%(r-l+1)\ne 0\)

思路

  • 当 \(n=1\) 时,\(p=[1]\)
  • 当 \(n\) 为其他奇数时,有 \(\frac{n*(n+1)}{2}\%n=0\) ,不能构造出这样的排列
  • 当 \(n\) 为偶数时,可以构造 \([2,1,4,3……n,n-1]\) 这样的一个奇偶相间的排列,证明如下:
    • 当 \(l\) 和 \(r\) 奇偶性不同时,\(sum=\frac{(r-l+1)(l+r)}{2}\) ,因为 \((l+r)\%2\ne 0\),所以 \(gcd(\frac{(r-l+1)(l+r)}{2},r-l+1)=\frac{(r-l+1)}{2}\),即 \(sum\%(r-l+1)\ne 0\)
    • 当 \(l\) 和 \(r\) 奇偶性相同时,
      • 当 \(l\) 和 \(r\) 都为偶数时,\(sum=\frac{(r-l+1)(l+r)}{2}-1\) ,\(sum\%(r-l+1)= -1 \ne 0\)
      • 当 \(l\) 和 \(r\) 都为奇数时,\(sum=\frac{(r-l+1)(l+r)}{2}+1\) ,\(sum\%(r-l+1)= 1 \ne 0\)

代码

#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

题意

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

思路

对于产生冲突的区间 \([a_{i-2},a_{i-1},a_{i}]\) ,都由 \(a_i\)唯一确定,对于每个查询,用区间总长度 \(r-l+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;
}

标签:869,frac,题意,int,sum,cin,Codeforces,--,Div
From: https://www.cnblogs.com/zzmxj/p/17366613.html

相关文章

  • Codeforces Round 869 (Div. 2)
    Preface一把回到紫名还是很舒服的,D题手比较稳猜了点性质水过主要还是C脑抽了想了挺久才看出来是个丁真题,不然最后过了D之后30min可以看看E的由于要写学校的图论专题所以接下来一段时间的CF补题计划就要先停一停了A.Politics傻逼题,当某个人的串和第一个人有任意一个位置不同......
  • Codeforces Round 823 (Div. 2)C
    C.MinimumNotation思路:我们可以进行的操作时将一个位置的数删除然后在任意位置处添加一个比当前数大1并且小于9的数,所以我们的操作只会让一个数变大,我们统计一个最大值的后缀,贪心的考虑如果当前数的后面有比他小的数的话,我们就需要让这个小的数往前走才能使字典序变小,如果当前......
  • Codeforces Round 867 (Div. 3)
    题目链接E核心思路首先我们先考虑什么情况下是肯定不可以交换成功的:aaabc.比如像这种a的个数超过了我们整个字符串一半的长度就肯定是不可以的。然后剩下的情况肯定都是可以的。然后考虑怎么样可以使得交换次数最小呢:aaaabbccddff。我们发现这组的话我们只需要交换两......
  • codeforces div1A
    A.CircularLocalMiniMax题目翻译:给我们一个数组(循环的也就是1和n是相邻的),我们可以对数组进行任意调序,对于每个数b[i]要求满足b[i]<b[i-1]&&b[i]<b[i+1]或者满足b[i]>b[i-1]&&b[i]>b[i+1]。如果存在就输出yes并且输出构造的序列,否则输出no。思路:我们考虑......
  • Codeforces Round 869 (Div.1 & Div.2) 题解
    2A.Politics因为编号为\(1\)的人一定不会离开,那么最后留下的人一定要和编号为\(1\)的人的所有参数都一致,所以计数即可。#include<bits/stdc++.h>#include<ext/pb_ds/assoc_container.hpp>#include<ext/pb_ds/tree_policy.hpp>#include<ext/pb_ds/hash_policy.hpp>u......
  • Codeforces Round 825 (Div. 2)——B
      #include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;#defineendl"\n"inlineintgcd(inta,intb){returnb>0?gcd(b,a%b):a;}inlineintlcm(inta,intb){returna/gcd(a,b)*b;}constint......
  • Codeforces Round 855 (Div. 3)--E
    题意:给定一个k,可以任意次交换满足|i-j|=k或|i-j|=k+1的两个位置的元素很容易发现有区间内的字符是可以任意交换的,但是一个个字符考虑太混乱了(就是这样子把脑袋搞晕了),从左考虑那么(1,n-k)这个区间可以任意交换,从右考虑(k+1,n)这个区间可以任意交换那......
  • Codeforces Round 863 (Div. 3)———E
    题意:给定一个k,问由012356789组成的数字第k大的是多少链接:Problem-E-Codeforces#include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;#defineendl"\n"/*思路:k代表在2没有出现4的数字中,第k大的数十进制表示由“0123456789”这九个数组......
  • Codeforces Round 855 (Div. 3)--D
    题意:给定一个字符串,删除其中连续两个字符,问有多少种不同字符串的情况#include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;#defineendl"\n"//开始时假设每个点都对答案有贡献,考虑什么时候没有贡献//假如字符串某处出现aba这种//删除ab或者ba最后都是......
  • 总结,从 766 开始(Div2 30)
    3.10A分块B 分数规划,以前没学过C推式子 3.11A推结论,先划分连续段,然后从一个长度>=k的连续段开始操作B推式子C平衡树套线段树(为了节省空间需要把内层线段树改成平衡树)或定期重构+树上差分+动态开点线段树,每个结点上有一棵线段树,每B次操作后向上合并 3.12......