首页 > 其他分享 >CF1928E题解

CF1928E题解

时间:2024-02-15 12:44:27浏览次数:29  
标签:02 ch int 题解 CF1928E 项数 等差数列

Modular Sequence

题目传送门

题解

发现 \(a_i+y\) 与 \(a_i\bmod y\) 均不改变 \(a_i\) 模 \(y\) 的余数,所以答案序列的每个元素均可表示为 \(x\bmod y+ky\) 的形式,先让 \(s\) 减去 \(n\times (x\bmod y)\),再除以 \(y\),这样原序列可以被划分为一个从 \(\lfloor\dfrac{x}{y} \rfloor\) 开始的等差数列和若干个从 \(0\) 开始的等差数列。

第一个等差数列可以直接枚举项数,后面的考虑预处理 dp,设 \(f_i\) 表示和为 \(i\) 的合法数列至少需要几项,转移枚举最后一个等差数列的项数,容易发现复杂度是 \(O(\sqrt n)\) 级别的。

最后还要输出方案,记录一下转移时最后一项的项数即可,都是简单的。

代码:

/*
 * @Author: operator_ 
 * @Date: 2024-02-15 11:02:31 
 * @Last Modified by: operator_
 * @Last Modified time: 2024-02-15 12:36:34
 */
#include<bits/stdc++.h>
using namespace std;
#define int long long
inline int rd() {
    int s=0,m=0;char ch=getchar();
    while(!isdigit(ch)) {if(ch=='-')m=1;ch=getchar();}
    while( isdigit(ch)) s=(s<<3)+(s<<1)+(ch^48),ch=getchar();
    return m?-s:s;
}
int t,n,x,y,s,f[200005],g[200005];
signed main(){
    cin>>t;
    memset(f,0x3f,sizeof(f));f[0]=0;
    for(int i=1;i<=200000;i++)
        for(int j=1;(j-1)*j/2<=i;j++)
            if(f[i-(j-1)*j/2]+j<f[i]) 
                g[i]=j,f[i]=f[i-(j-1)*j/2]+j;
    while(t--) {
        n=rd(),x=rd(),y=rd(),s=rd();
        s-=n*(x%y);int xx=x/y,fl=0;
        if(s<0||s%y!=0) {puts("NO");continue;}
        s/=y;
        for(int i=1;i<=n&&(2*xx+i-1)*i/2<=s;i++) {
            int now=s-(2*xx+i-1)*i/2;
            if(f[now]+i<=n) {
                puts("YES");
                for(int j=1;j<=i;j++) printf("%lld ",x+j*y-y);
                for(int j=1;j<=n-f[now]-i;j++) printf("%lld ",x%y);
                while(now!=0) {
                    for(int j=1;j<=g[now];j++) printf("%lld ",x%y+j*y-y);
                    now-=(g[now]-1)*g[now]/2;
                }
                puts("");fl=1;break;
            }
        }
        if(!fl) puts("NO");
    }
    return 0;
}

标签:02,ch,int,题解,CF1928E,项数,等差数列
From: https://www.cnblogs.com/operator-/p/18016157

相关文章

  • luogu6600题解
    题意中的字母T可以看作一个回文的\(1\)串和回文串中心带一个向下的\(1\)串。我们先来考虑朴素做法,可以枚举这个中心然后扩展来找有几个符合要求的串。朴素做法显然复杂度不对。沿着朴素的思路优化。如果只考虑\(w\gea\)和\(h\geb\)这两个要求很容易想到容斥。此......
  • 问题解决之-List of devices attached
    背景:计划是通过appium+mumu模拟器进行app测试学习,但是安好appium、mumu12模拟器、AndroidStudio(已进行环境变量配置)后,发现mumu12模拟器无法识别,输入adbdevices回车后,显示如下:通过一系列的资料查找解决过程如下:1、mumu模拟器连接:详见官方解决方法:https://mumu.163.com/help/......
  • AtCoder Beginner Contest 340 题解
    AtCoderBeginnerContest340题解去我的洛谷博客里看这篇文章!A-ArithmeticProgression模拟即可。//2024/2/11PikachuQAQ#include<iostream>usingnamespacestd;inta,b,d;intmain(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);cin>>......
  • AtCoder Beginner Contest 340 题解
    AtCoderBeginnerContest340题解去我的洛谷博客里看这篇文章!A-ArithmeticProgression模拟即可。//2024/2/11PikachuQAQ#include<iostream>usingnamespacestd;inta,b,d;intmain(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);cin>>......
  • 「JOI Open 2019」三级跳 题解
    https://loj.ac/p/3153Part1暴力暴力思路:每次询问的时候,枚举\(a\)和\(b\)在哪里,然后就确定了\(c\)的范围\([2\timesb-a]\),找这个范围内的最大的A[c]即可。Part2优化舍解考虑哪一些\([a,b]\)是明显不优的。如果存在\(i\),满足\(a<i<b\)且\(A[i]<\min(A[a],A[b......
  • P4113 [HEOI2012] 采花 题解
    题目链接:采花这题数据加强到卡了\(2e6\)的可持久化线段树在线做法,先给只tle了最后一个点的代码:卡常参照代码#include<bits/stdc++.h>//#pragmaGCCoptimize(2)//#pragmaGCCoptimize("Ofast,no-stack-protector,unroll-loops,fast-math")//#pragmaGCCtarget("......
  • LOJ #2876. 「JOISC 2014 Day2」水壶 题解
    DescriptionJOI君所居住的IOI市以一年四季都十分炎热著称。IOI市被分成\(H\)行,每行包含\(W\)块区域。每个区域都是建筑物、原野、墙壁之一。IOI市有\(P\)个区域是建筑物,坐标分别为\((A_1,B_1),\)\((A_2,B_2),\)\(\ldots,\)\((A_P,B_P)\)。JOI君只能进入建......
  • CF1931F Chat Screenshots 另一种题解
    题目链接:CF或者洛谷本题拓扑排序不再赘述,来说说字符串哈希怎么做这题。本篇以另一种角度剖析题目背景,并不追求最优,例如有些地方其实可以暴力判断,主要以构造的角度阐述,顺便感谢灵茶山的朋友的讨论。结论三个串及其以上必定能构造出最初的那个串。下面进行证明:首先一个串,显......
  • P8683题解
    首先,看题目描述,给定N个加号,与M个减号,要你求后缀表达式最大值,实际上就是求这些符号和数字排列起来的最大值。这题很容易让人想到贪心。但是呢,又怎么个贪心法呢?很容易看出来,我们可以先用sort进行这么一个排序,之后,我们对于前N大的数加起来,对于剩下的数就减去,于是代码大体就......
  • 麦肯锡问题解决流程-为希望提升水平的产品经理量身定制
    您是否想知道世界上最成功的产品经理如何始终如一地提供不仅满足而且超出预期的解决方案?秘密可能就在于世界上最负盛名的咨询公司之一麦肯锡公司所磨练的方法论。本文深入探讨了麦肯锡的问题解决流程,该流程专为希望提升水平的产品经理量身定制。01.麦肯锡方法:产品管理风......