首页 > 其他分享 >Codeforces Round 876 (Div. 2)题解

Codeforces Round 876 (Div. 2)题解

时间:2023-06-04 13:33:57浏览次数:64  
标签:lceil 876 题解 元素 Codeforces long Div rceil

Codeforces Round 876 (Div. 2)

A. The Good Array

标签

greedy math

题意

对于任意 \(i\in\{1,2,\dots,n\}\),要求数列 \(a\) 满足前 \(i\) 个元素中至少有 \(\lceil\frac{i}{k}\rceil\) 个元素为 \(1\),后 \(i\) 个元素中至少有 \(\lceil\frac{i}{k}\rceil\) 个元素为 \(1\)。

思路

  1. 考虑特殊情况 \(k=1\),因为此时序列 \(1\) 的插入点连续,所以答案为 \(n\)。
  2. 欲令数列 \(a\) 满足前 \(i\) 个元素中至少有 \(\lceil\frac{i}{k}\rceil\) 个元素为 \(1\),根据贪心只需要在 \(1, k+1, 2k+1, \dots,xk+1,n\) 的位置插入 \(1\)。在该前提下,讨论欲满足另一要求需要额外插入的 \(1\) 的个数,分类讨论。
  3. 若 \(xk+1\) 与 \(n\) 之间的差值 \(d=n\%k-1> 0\),则易得 \(0<d<k\),此时无需再多插 \(1\),答案为 \(\lfloor\frac{n-1}{k}\rfloor+2\);若 \(d=0\),则说明 \(xk+1\) 与 \(n\) 重合,而 \(n\) 又为满足第二要求的第一个 \(1\) 的位置,故此时无需多插 \(1\),进而答案为 \(\lfloor\frac{n-1}{k}\rfloor+1\);若 \(d=-1\),则说明 \(xk+1=n+1\),此时把 \((x-1)k+1\) 作为新的 \(x'k+1\),答案仍为 \(\lfloor\frac{n-1}{k}\rfloor+2\)。
    4, 时间复杂度为 \(\mathcal O(t)\)。

代码

点击查看代码
#include <bits/stdc++.h>
#define ll long long
#define ld long double
#define ull unsigned long long
using namespace std;
int t, n, k; 
int main ()
{
	scanf ("%d", &t);
	while (t --) 
	{
		scanf ("%d %d",&n, &k);
		if (k == 1) printf ("%d\n", n);
		else if (n % k - 1 != 0) 
			printf ("%d\n", (n - 1) / k + 2);
		else printf ("%d\n", (n - 1) / k + 1);
	}
	return 0;
}

收获

  1. 脑子混乱时,静下心来重新发现性质。比如,该题最关键的性质为除去位置 1 和位置 n 处的 \(1\),其他位置的 \(1\) 之间的差值恒为 \(k\),以及对是否需要额外插 \(1\) 的判断条件。

标签:lceil,876,题解,元素,Codeforces,long,Div,rceil
From: https://www.cnblogs.com/shyiaw/p/17455558.html

相关文章

  • “AIR SDK 0.0: AIR SDK location “...\devsdks\AIRSDK\Win” does not exist.”
    导入AS3项目时提示“AIRSDK0.0:AIRSDKlocation“D:\ProgramFiles\Adob5eFlashBuilder4.7\eclipse\plugins\com.adobe.flexbuilder.flex_4.7.0.349722\devsdks\AIRSDK\Win”doesnotexist.”是AS3项目找不见AIRSDK.打开项目配置ActionScriptBuildPath,路径出错......
  • 【LGR-141-Div.2】洛谷 6 月月赛 I (前两题)
    T1:金盏花传送门直接暴力枚举前6位的值即可,记得开longlong#include<bits/stdc++.h>usingnamespacestd;#defineintlonglonginty,z,ans=1e18;signedmain(){ scanf("%lld%lld",&y,&z); for(inti=100000;i<=999999;i++){ intx=i*1000000+y; ans=min......
  • CF1329E Dreamoon Loves AA 题解
    令\(p_0=0,m\leftarrowm+1,p_{m}=n,a_i=p_i-p_{i-1}\),设在\((p_{i-1},p_i)\)中有\(d_i-1\)个B变成了A,满足\(\sum_{i=1}^m(d_i-1)=k\),让\(k\leftarrowk+m\),这样\(d\)需要满足的限制就变成了\(\sum_{i=1}^md_i=k\)。这也可以看作把\(a_i\)分成\(d_i\)个正整数之......
  • ABC302Ex Ball Collector 题解
    注意到当有那些\((a_i,b_i)\)是确定的时,答案就是将\((a_i,b_i)\)连边后每个连通块的\(\min(|V|,|E|)\)之和。那么这个东西用可撤销并查集维护即可。#include<algorithm>#include<cstdio>usingnamespacestd;constintN=2e5;structEdge{intto,nxt;}e[......
  • 2023青岛市程序设计竞赛小学组题解
    1.付钱题目链接:https://www.luogu.com.cn/problem/U303904代码:#include<bits/stdc++.h>#definelllonglongusingnamespacestd;intmain(){ lln;cin>>n; cout<<n/100<<''<<(n%100)/50<<''<<(n%50)/20......
  • 第十届蓝桥杯c++b组国赛题解(还在持续更新中...)
    试题A:平方序列解题思路:直接枚举一遍x的取值,然后按照题目给定的式子算出y,每次取x+y的最小值即可答案为7020代码实现:#include<iostream>#include<algorithm>#include<cmath>usingnamespacestd;#defineintlonglongconstintN=1e4+5;signedmain(){ //记录答案......
  • ABC215E 题解
    前言题目传送门!更好的阅读体验?萌萌DP题。思路题目就是在说从\(a\)里面按顺序掏出来一些字母,使得相同的字母都是相邻的(比如AABBBBCD可行,AAABBCAA不行)。看起来很不可做,突破口在于\(\text{A}\sim\text{J}\)一共只有\(10\)个字母,考虑状压。设\(dp_{i,s}\)表示......
  • 道路翻修题解
    \(\mathcal{Description}\)给定一张无向图,为每条边定向,定义每个点的价值为出度与入度之差的绝对值,求最大价值和。对于\(40\%\)的数据,\(1\leqn,m\leq20\)。对于\(70\%\)的数据,\(1\leqn\leq17\)。对于\(90\%\)的数据,\(1\leqn\leq22\)。对于所有数据,\(1\leqn\leq25\)......
  • CF1808E3 题解
    题意传送门求有多少包含\(n\)位数码的\(k\)进制数,满足存在一位数等于其他\(n-1\)位数的总和模\(k\)。\(1\len\le10^{18},1\lek\le2000\)。题解简单的组合数学都不会了……蔬菜越来越多,我该怎么办?条件等价于存在某一位\(x\),满足\(2x\equivs\pmodk\)。容易想到......
  • P1545 [USACO04DEC] Dividing the Path G 题解
    丢一发好理解又好写的线段树优化dp。题目传送门简要题意给定一个长为\(l\)的线段,求出尽量少的不相交区间覆盖整段线段,要求题目给的所有子区间只被\(1\)个区间覆盖。分析显然题目给的子区间\([s,e]\)中只有\(s\)和\(e\)端点能作为线段端点,所以我们应该给\([s+1,......