首页 > 其他分享 >[AGC063C] Add Mod Operations 题解

[AGC063C] Add Mod Operations 题解

时间:2023-12-04 16:13:47浏览次数:34  
标签:Operations typedef ch int 题解 long Add getchar define

题目链接

点击打开链接

题目解法

好难想的构造题!!!到底是怎么想到的???

首先无解的条件是好判的,如果有 \(i\neq j,\;a_i=a_j\) 且 \(b_i\neq b_j\),那么就无解

将 \(a\) 从小到大排序
考虑下面的构造方式:\(y=curmax+x\),这样可以使最大值清 \(0\),其他数都 \(+x\),这是一个类似消元的过程,每次可以消去 \(a_{max}\)
不难发现,\(n-1\) 次后,序列将变成:\(a_1+\sum\limits_{i=1}^{n-1}x_i,0,x_{n-1},x_{n-1}+x_{n-2},...,\sum\limits_{i=2}^{n-1}a_i\)
考虑构造合适的 \(x_i\;(i\in[1,n-1])\),使 \(n-1\) 次之后 \(a_i=b_i-b_2\)
可以使:\(x_1=-a_1+b_1-b_n,\;x_i(i\in[2,n-1])=b_{n-i+2}-b_{n-i+1},\;x_n=b_2\)
但这样 \(x_i\) 可能 \(<0\),直接让 \(x_i+inf\to x_i\) 即可

时间复杂度 \(O(n^2)\)

#include <bits/stdc++.h>
#define int long long
#define F(i,x,y) for(int i=(x);i<=(y);i++)
#define DF(i,x,y) for(int i=(x);i>=(y);i--)
#define ms(x,y) memset(x,y,sizeof(x))
#define SZ(x) (int)x.size()-1
#define pb push_back
#define x first
#define y second
using namespace std;
typedef long long LL;
typedef unsigned long long ull;
typedef pair<int,int> pii;
template<typename T> void chkmax(T &x,T y){ x=max(x,y);}
template<typename T> void chkmin(T &x,T y){ x=min(x,y);}
inline int read(){
    int FF=0,RR=1;
    char ch=getchar();
    for(;!isdigit(ch);ch=getchar()) if(ch=='-') RR=-1;
    for(;isdigit(ch);ch=getchar()) FF=(FF<<1)+(FF<<3)+ch-48;
    return FF*RR;
}
const int N=1100,inf=1e10;
int n,x[N],y[N];
pii v[N];
signed main(){
    n=read();
    F(i,1,n) v[i].x=read();
    F(i,1,n) v[i].y=read();
    sort(v+1,v+n+1);
    int cur=0;
    F(i,1,n){
        int j=i;
        while(j<n&&v[j+1].x==v[i].x) j++;
        bool flg=1;
        F(k,i+1,j) if(v[k].y!=v[k-1].y){ flg=0;break;}
        if(!flg){ puts("No");exit(0);}
        v[++cur]=v[i],i=j;
    }
    n=cur;
    if(n==1){ puts("Yes");puts("1");printf("%lld %lld\n",(v[1].y-v[1].x+inf)%inf,inf);exit(0);}
    x[1]=-v[1].x+v[1].y-v[n].y+inf;
    F(i,2,n-1) x[i]=v[n-i+2].y-v[n-i+1].y+inf;
    x[n]=v[2].y;
    F(i,1,n-1){
        y[i]=v[n-i+1].x+x[i];
        F(j,1,n) v[j].x=(v[j].x+x[i])%y[i];
    }
    y[n]=inf;
    F(j,1,n) v[j].x=(v[j].x+x[n])%y[n];
    puts("Yes");printf("%d\n",n);
    F(i,1,n) printf("%lld %lld\n",x[i],y[i]);
    fprintf(stderr,"%d ms\n",int64_t(1e3*clock()/CLOCKS_PER_SEC));
    return 0;
}

标签:Operations,typedef,ch,int,题解,long,Add,getchar,define
From: https://www.cnblogs.com/Farmer-djx/p/17875195.html

相关文章

  • CF1902 B Getting Points 题解
    LinkCF1902BGettingPointsQuestionMonocarp的一个学期有\(n\)天,需要修\(P\)个学分,完成一节课程加\(l\)个学费,完成一个任务加\(t\)个学分Monocarp一天可以完成一节课+两个任务任务每周分配一个,也就是day1,day8,day15...问,在可以修满学分的情况下,Monocarp最多休......
  • 在NET8中使用简化的 AddJwtBearer 认证
    开发环境系统版本:win10.NETSDK:NET8开发工具:vscode参考引用:使用dotnetuser-jwts管理开发中的JSONWeb令牌注意:以下示例中的端口、token等需替换成你的环境中的信息创建项目运行以下命令来创建一个空的Web项目,并添加Microsoft.AspNetCore.Authentication.JwtBea......
  • 湖南省网络攻防邀请赛 RE 题解
    ez_apkk解题过程:将apk拖入jadx,查看MainActivity,发现是简单RC4加密,密钥是“55667788”,最后再将加密结果+1publicStringEncrypt(StringplainText,Stringkey){int[]S=newint[256];byte[]K=newbyte[256];char[]cArr={'\n','+',18......
  • CF1692H Gambling 题解
    题意:思路:考虑离散化:枚举$x$中出现的每一个数$val$,$val$出现的次数为$cnt$,记录$val$每一次出现的索引$idx_i(1\lei\lecnt)$。设$x$中与$val$相等的数贡献为$+1$,与$val$不相等的数贡献为$-1$,那么问题转化为最大连续子段和。由......
  • P1004 [NOIP2000 提高组] 方格取数 题解
    题意:思路:考虑四维$dp$:设$dp[i][j][k][l]$表示两条路径分别走到$(i,j)$和$(k,l)$时所能获取的最大和,显然会超时。考虑三维$dp$:设$dp[i][j][k]$表示两条路径走了$i$步分别走到第$j$行和第$k$行时所能获取的最大和,通过当前步数$i$以及当......
  • vue 编辑器+使用场景+问题解决
    vue编辑器组件添加依赖"dependencies":{"@codemirror/autocomplete":"^6.4.2","@codemirror/commands":"^6.2.1","@codemirror/lang-javascript":"^6.0.2","@codemirror/lan......
  • SP1716 GSS3 - Can you answer these queries III 题解
    题意:给定一个长度为$n$的序列$a$,$q$次操作,每次操作为以下之一:\(0\)\(x\)\(y\):将\(a_x\)修改为\(y\)\(1\)\(l\)\(r\):询问区间\([l,r]\)的最大连续子序列和思路:考虑线段树维护区间最大连续子序列和:线段树每个节点需要维护的信息:区间左端点$l$,区......
  • P3214 [HNOI2011] 卡农 题解
    Description给定\(n,m\),要从\(1,2,\dots,2^n-1\)中选\(m\)个无序的数,使得他们互不相同且异或和为\(0\),问有多少种选法。对\(998244353\)取模。Solution考虑求出有序的方案数的个数再除以\(m!\)。设\(f_i\)表示选出\(i\)个数的方案。那么如果随便选前\(i-1\)......
  • ABC331G题解
    ABC331G日常被bot吊打罢了。首先注意到一件事是你需要求一堆max的期望对吧。所以其实上来就应该试试上min-max容斥的。但是鉴于我没有脑子,所以其实没想到也可以理解。先来复习一下式子:\[Emax(S)=\sum_{T\subsetS}Emin(T)(-1)^{\midT\mid-1}\]所以带入要求的东西......
  • ICPC2022Hangzhou C No Bug No Game 题解
    LinkICPC2022HangzhouCNoBugNoGameQuestion给定\(n\)个物品和上限\(k\),要求最大化分数,物品的选择顺序可以任意第\(i\)个物品一行\(p_i\)代表个数,后面\(p_i\)个\(w_j\)代表容量,定义\(sum=\sum\limits_{j=1}^{i-1}\),对于第\(i\)个物品\(sum+p_i\lek\)......