首页 > 其他分享 >CF R870 div.2

CF R870 div.2

时间:2023-05-07 20:01:38浏览次数:47  
标签:pre R870 int ed CF 数组 ans div.2 using

C

 输出"NO"的充要条件是要在最初就选择 \(k\) 个物品,使得 \(k \mid N\)。
发现朴素做法是 \(O(TM)\),可以对 \(N\) 的约数进行枚举,优化为 \(O(T\sqrt(N))\),再特判 \(N \leq M\) 和 \(N = 1\)的情况。

#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 10;
int T, n, m;
int main(){
	cin >> T;
	while(T --){
		scanf("%d%d", &n, &m);
		bool ans = false;
		if(m >= n) ans = true;
		for(int i = 2; i <= sqrt(n); i++)
			if(n % i == 0 && i <= m) ans = true;
		if(n == 1) ans = false;
		if(ans) puts("NO");
		else puts("YES");
	}
	return 0;
}

D

 对公式进行变形:\(ans=a[l]+l+a[p]+a[r]-r\)。
发现可以枚举\(p\),又由单调性预处理出两个数组,\(pre[i]=max(pre[i-1],a[i]+i)\),另一个数组同理。
于是可以 \(O(N)\) 线性求解,记得多测清空数组边界值。

#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10, INF = 0x3f3f3f3f;
int T, n, a[N], pre[N], ed[N];
int main(){
	cin >> T;
	while(T --){
		scanf("%d", &n);
		pre[0] = ed[n + 1] = -INF;
		for(int i = 1; i <= n; i++)
			scanf("%d", &a[i]);
		for(int i = 1; i <= n; i++)
			pre[i] = max(pre[i - 1], a[i] + i);
		for(int i = n; i; i--)
			ed[i] = max(ed[i + 1], a[i] - i);
		int ans = 0;
		for(int i = 1; i <= n; i++)
			ans = max(ans, a[i] + pre[i - 1] + ed[i + 1]);
		printf("%d\n", ans);
	}
	return 0;
}

标签:pre,R870,int,ed,CF,数组,ans,div.2,using
From: https://www.cnblogs.com/P32sx-qq1309267816-tel18081238250/p/17379890.html

相关文章

  • CF1591F - Non-equal Neighbours
    Mysolution首先,我们考虑最暴力的\(dp\),设\(dp_{i,j}\)表示当前处理到第\(i\)位,目前序列尾部是\(j\)的方案数。这个\(dp\)的转移是很容易的。\(dp_{i,j}=\sum_{k=1}^{a_{i-1}}[k\neqj]dp_{i-1,k}\)。但是复杂度也是很寄的,是\(O(na)\)。然后我们考虑优化这个暴力,我们......
  • CF906C - Party
    我们发现,这其实就是一个完全图合并的问题。如果一个子图不是完全图,就一定要把它们合并起来。我们考虑\(dp_{msk}\)表示只对当前集合\(msk\)的点进行操作,使得\(msk\)集合是完全图的最小步数。初始状态是枚举所有的\(msk\)检测是否是完全图。然后我们每次枚举和当前集合的......
  • CF1829B 题解
    题目思路先定义变量\(t,ans\)。循环从\(0\)到\(n-1\),对于第\(i\)个数,如果为\(0\),\(t=t+1\),否则将\(t\)清零。每次循环\(ans=\max(ans,t)\)表示最多有多少个连续的\(0\)。最后输出\(ans\)即可。核心代码点击查看代码voidsolve(){intn=read(),a[1005],a......
  • CF960F
    首先,本题的本质是有向图的LIS问题,按照题目输入的顺序依次加边,设\(f_{i,j}\)表示以\(i\)结尾,路径权值的最大值为\(j\)的最长链的长度,有状态转移方程\(f_{i,j}=\max(f_{k,s})+1(k\toi,s<j,val(k\toj)=k)\),直接转移时间空间复杂度直接爆炸,考虑用动态加点线段树维护\(f_{i......
  • CF1829G Hits Different
    题目地址题意:有这样一个塔,初始全为蓝色,第i位上的数为i2,丢球丢中第k位时,将使得第k位和他头顶的数以及头顶的数的头顶的数以及...都变成红色,求红色数的和Solutiondp转移,我们把斜着向右下的所有数转移在一起,然后从第k位数开始往右上走,答案就是所有的和voidinit(){ intno......
  • CF1829G Hits Different
    话说这场比赛的题名字好像都是TaylorSwift的歌名。题意有一个由罐子排列成的金字塔,罐子自上而下依次编号:现在你要打下一个罐子,则与其有关的所有罐子也会被击落,计算所有被击落的罐子编号的平方和。比如说,你击中了\(9\)号罐子,则上图中所有标红的罐子都会被击落。\(n\le......
  • CF750E - New Year and Old Subsequence
    题意:给一个字符串,每次询问它的一个区间,问最少删除多少个字符,使得区间没有子序列2016,但是有子序列2017。Mysolution首先考虑贪心,通过预处理的方式找到区间最后一个7,依次往前贪心的找到最靠后的一组2017。接下来,我们需要7的后面没有6,7前面的部分不能组合出2016。我们先......
  • WEB|[BSidesCF 2019]Futurella
    页面英文提示:阻止外星人!我们在垃圾箱里发现了这张纸条。我们认为它来自入侵的外星人!你能读一下吗?使用翻译可以翻译部份内容,也没发现什么规律查看源码发现flagflag{ddc88d97-0505-4a91-b442-e7bd74b02358}最后还发现,直接将所有内容复制到其他地方会看到原本文字Resistance......
  • cf1826D
    一个区间的权值为最大的三个数的和-区间长度,求最大的权值。首先我们注意到,两个端点肯定是max,考虑反证法,假设当前选的是l,r区间,若两端不是max,则可以通过增大l,减小r来增加答案。(然而好像并没有什么用?)我们可以设\(f[i][1/2/3]\),表示到了第i个点,我们当前选了几个的最大贡献。那么根......
  • CF1826E nowcoder55993G - bitset -
    CF1826E这个题比赛的时候基本做出来了,就是不会用bitset导致最后寄了。这已经是第三次很有希望做出E最后没有做出来了/ll好几个月了一直卡在四题,吐了首先如果对于一个模特,她在\(i\)城市的所有分数都分别小于\(j\)城市的,那么就\(i\rightarrowj\)连一条边,显然这是若......