Koxia and Whiteboards

Statement
Kiyora 有nnn块白板,从111 到nnn 编号。初始情况下, 第iii 块白板上写着一个整数aia_iai​ 。
Koxia 要进行 mmm次操作。第jjj 次操作是,选择一块白板并将上面的整数修改为bjb_jbj​ 。
计算全部操作后所有白板上数字之和的最大可能值。

每次操作修改最小的数。

#include<bits/stdc++.h>
using namespace std;
#define For(i,n) for(int i=1;i<=n;i++)
#define Fork(i,k,n) for(int i=k;i<=n;i++)
#define ForkD(i,k,n) for(int i=n;i>=k;i--)
#define Rep(i,n) for(int i=0;i<n;i++)
#define ForD(i,n) for(int i=n;i;i--)
#define RepD(i,n) for(int i=n;i>=0;i--)
#define Forp(x) for(int p=pre[x];p;p=next[p])
#define Forpiter(x) for(int &p=iter[x];p;p=next[p])
#define Lson (o<<1)
#define Rson ((o<<1)+1)
#define MEM(a) memset(a,0,sizeof(a));
#define MEMI(a) memset(a,0x3f,sizeof(a));
#define MEMi(a) memset(a,128,sizeof(a));
#define MEMx(a,b) memset(a,b,sizeof(a));
#define INF (0x3f3f3f3f)
#define F (1000000007)
#define pb push_back
#define mp make_pair
#define fi first
#define se second
#define vi vector<int>
#define pi pair<int,int>
#define SI(a) ((a).size())
#define Pr(kcase,ans) printf("Case #%d: %lld\n",kcase,ans);
#define PRi(a,n) For(i,n-1) cout<<a[i]<<' '; cout<<a[n]<<endl;
#define PRi2D(a,n,m) For(i,n) { \For(j,m-1) cout<<a[i][j]<<' ';\cout<<a[i][m]<<endl; \}
#pragma comment(linker, "/STACK:102400000,102400000")
#define ALL(x) (x).begin(),(x).end()
#define gmax(a,b) a=max(a,b);
#define gmin(a,b) a=min(a,b);
typedef long long ll;
typedef long double ld;
typedef unsigned long long ull;
ll mul(ll a,ll b){return (a*b)%F;}
ll add(ll a,ll b){return (a+b)%F;}
ll sub(ll a,ll b){return ((a-b)%F+F)%F;}
void upd(ll &a,ll b){a=(a%F+b%F)%F;}
inline int read()
{int x=0,f=1; char ch=getchar();while(!isdigit(ch)) {if (ch=='-') f=-1; ch=getchar();}while(isdigit(ch)) { x=x*10+ch-'0'; ch=getchar();}return x*f;
}
ll a[101010];
int main()
{//  freopen("A.in","r",stdin);
//  freopen(".out","w",stdout);int T=read();while(T--){int n=read(),m=read();if(n==1) {For(i,n+m) cin>>a[i];cout<<a[n+m]<<endl;continue;}priority_queue<ll, vector<ll>, greater<ll> > q;For(i,n) {q.push(read());}For(i,m) q.pop(),q.push(read());ll ans=0;while(!q.empty()) ans+=q.top(),q.pop();cout<<ans<<endl;}return 0;
}

Koxia and Permutation

Statement
Reve 有两个整数nnn 和kkk 。
对于一个长度为 nnn的排列 ppp,我们令ccc 是一个长度为 n−k+1n-k+1n−k+1的数组,其中

ci=max(pi,⋯,pi+k−1)+min(pi,⋯,pi+k−1)c_i = max(p_i,\cdots, p_{i+k-1})+min(p_i,\cdots, p_{i+k-1})ci​=max(pi​,⋯,pi+k−1​)+min(pi​,⋯,pi+k−1​)
定义一个排列ppp 的代价是ccc 中的最大值。
Koxia 希望你构造一个排列使得其代价尽可能小。

Statement
Joi 有一个数组 aaa,包含nnn 个正整数。Koxia 希望你判定是否存在一个正整数xxx 使得gcd(ai+x,aj+x)=1gcd(a_i+x,a_j+x)=1gcd(ai​+x,aj​+x)=1
对于所有1≤i<j≤n1\le i \lt j \le n1≤i<j≤n 都成立。

#include<bits/stdc++.h>
using namespace std;
#define For(i,n) for(int i=1;i<=n;i++)
#define Fork(i,k,n) for(int i=k;i<=n;i++)
#define ForkD(i,k,n) for(int i=n;i>=k;i--)
#define Rep(i,n) for(int i=0;i<n;i++)
#define ForD(i,n) for(int i=n;i;i--)
#define RepD(i,n) for(int i=n;i>=0;i--)
#define Forp(x) for(int p=pre[x];p;p=next[p])
#define Forpiter(x) for(int &p=iter[x];p;p=next[p])
#define Lson (o<<1)
#define Rson ((o<<1)+1)
#define MEM(a) memset(a,0,sizeof(a));
#define MEMI(a) memset(a,0x3f,sizeof(a));
#define MEMi(a) memset(a,128,sizeof(a));
#define MEMx(a,b) memset(a,b,sizeof(a));
#define INF (0x3f3f3f3f)
#define F (1000000007)
#define pb push_back
#define mp make_pair
#define fi first
#define se second
#define vi vector<int>
#define pi pair<int,int>
#define SI(a) ((a).size())
#define Pr(kcase,ans) printf("Case #%d: %lld\n",kcase,ans);
#define PRi(a,n) For(i,n-1) cout<<a[i]<<' '; cout<<a[n]<<endl;
#define PRi2D(a,n,m) For(i,n) { \For(j,m-1) cout<<a[i][j]<<' ';\cout<<a[i][m]<<endl; \}
#pragma comment(linker, "/STACK:102400000,102400000")
#define ALL(x) (x).begin(),(x).end()
#define gmax(a,b) a=max(a,b);
#define gmin(a,b) a=min(a,b);
typedef long long ll;
typedef long double ld;
typedef unsigned long long ull;
ll mul(ll a,ll b){return (a*b)%F;}
ll add(ll a,ll b){return (a+b)%F;}
ll sub(ll a,ll b){return ((a-b)%F+F)%F;}
void upd(ll &a,ll b){a=(a%F+b%F)%F;}
inline int read()
{int x=0,f=1; char ch=getchar();while(!isdigit(ch)) {if (ch=='-') f=-1; ch=getchar();}while(isdigit(ch)) { x=x*10+ch-'0'; ch=getchar();}return x*f;
}
ll a[101010];
int main()
{//  freopen("A.in","r",stdin);
//  freopen(".out","w",stdout);int T=read();while(T--){int n=read(),m=read();int b=n,a=1;For(i,n) if(i%m==0) {cout<<a++<<' ';} else cout<<b--<<' ';cout<<endl;}return 0;
}

Koxia and Number Theory

#include<bits/stdc++.h>
using namespace std;
#define For(i,n) for(int i=1;i<=n;i++)
#define Fork(i,k,n) for(int i=k;i<=n;i++)
#define ForkD(i,k,n) for(int i=n;i>=k;i--)
#define Rep(i,n) for(int i=0;i<n;i++)
#define ForD(i,n) for(int i=n;i;i--)
#define RepD(i,n) for(int i=n;i>=0;i--)
#define Forp(x) for(int p=pre[x];p;p=next[p])
#define Forpiter(x) for(int &p=iter[x];p;p=next[p])
#define Lson (o<<1)
#define Rson ((o<<1)+1)
#define MEM(a) memset(a,0,sizeof(a));
#define MEMI(a) memset(a,0x3f,sizeof(a));
#define MEMi(a) memset(a,128,sizeof(a));
#define MEMx(a,b) memset(a,b,sizeof(a));
#define INF (0x3f3f3f3f)
#define F (1000000007)
#define pb push_back
#define mp make_pair
#define fi first
#define se second
#define vi vector<int>
#define pi pair<int,int>
#define SI(a) ((a).size())
#define Pr(kcase,ans) printf("Case #%d: %lld\n",kcase,ans);
#define PRi(a,n) For(i,n-1) cout<<a[i]<<' '; cout<<a[n]<<endl;
#define PRi2D(a,n,m) For(i,n) { \For(j,m-1) cout<<a[i][j]<<' ';\cout<<a[i][m]<<endl; \}
#pragma comment(linker, "/STACK:102400000,102400000")
#define ALL(x) (x).begin(),(x).end()
#define gmax(a,b) a=max(a,b);
#define gmin(a,b) a=min(a,b);
typedef long long ll;
typedef long double ld;
typedef unsigned long long ull;
ll mul(ll a,ll b){return (a*b)%F;}
ll add(ll a,ll b){return (a+b)%F;}
ll sub(ll a,ll b){return ((a-b)%F+F)%F;}
void upd(ll &a,ll b){a=(a%F+b%F)%F;}
inline int read()
{int x=0,f=1; char ch=getchar();while(!isdigit(ch)) {if (ch=='-') f=-1; ch=getchar();}while(isdigit(ch)) { x=x*10+ch-'0'; ch=getchar();}return x*f;
}set<int> aa[101];
set<int> bb[101];ll a[101];bool work() {int n=read();For(i,n) cin>>a[i];sort(a+1,a+1+n);bool fl=1;For(i,n-1) if(a[i]==a[i+1]) {return 0;}For(i,n) aa[i].clear(),bb[i].clear();For(i,n) {Fork(j,2,n) {int t=a[i]%j;if (aa[j].find(t)!=aa[j].end()) {bb[j].insert(t);} else {aa[j].insert(t);}}}Fork(j,2,n) if (bb[j].size()==j) return 0;return 1;
}
int main()
{int T=read();while(T--){bool fl=work();puts(fl?"YES":"NO");}return 0;
}

Koxia and Game

Koxia 和 Mahiru 正在用三个长度为 nnn的数组 a,b,ca,b,ca,b,c 玩一个游戏。其中 a,b,ca,b,ca,b,c中的每个元素都是 111到 nnn 之间的整数。
游戏持续 nnn 轮。在第iii 轮中,她们进行以下操作:
令 SSS是{ai,bi,ci}\{ a_i,b_i,c_i \}{ai​,bi​,ci​} 的可重集。
Koxia 从可重集 SSS中选择一个元素并移除。
Mahiru 从可重集 SSS 的剩余两个元素中选择一个元素。
记 did_idi​是第 iii 轮中 Mahiru 选择的元素。如果ddd 是一个排列 ,则 Koxia 获胜;否则 Mahiru 获胜。
现在,只有 aaa和bbb 两个数组是已经确定的。作为 Koxia 的支持者,你希望选择合适的数组ccc 使得 Koxia 获胜。计算这样的ccc 的数量,输出其对998244353 取模后的结果。
Koxia 和 Mahiru 会以最优方式行动。

ccc满足条件当且仅当
∀i∈[1,n]⋂Z,∃p∈[1,n]⋂Z,(ap==i)+(bp==i)+(cp==i)>1\forall i \in [1,n]\bigcap Z, \exists p\in [1,n]\bigcap Z,(a_p==i)+(b_p==i)+(c_p==i)>1∀i∈[1,n]⋂Z,∃p∈[1,n]⋂Z,(ap​==i)+(bp​==i)+(cp​==i)>1
所以对于每个数xxx,ai,bia_i,b_iai​,bi​出现次数为0次时,无解
1次时,对应位置的ci=xc_i=xci​=x
出现3次或以上,那么至少有一个数出现至多1次,找出它能至少再填一个数。最后考虑每个数出现2次的情况,那么由于每个数出现两次,我们将a,b对应的相同数连线,分两种情况 :
ai=bia_i=b_iai​=bi​情况下cic_ici​填任意数
ai!=bia_i!=b_iai​!=bi​此时环长度大于2,cic_ici​只有2种填法(aia_iai​ or bib_ibi​)且环中其他位置的cic_ici​也确定了。
答案=2长度大于2的环的个数∗n长度等于2的环的个数=2^{长度大于2的环的个数}*n^{长度等于2的环的个数}=2长度大于2的环的个数∗n长度等于2的环的个数

#include<bits/stdc++.h>
using namespace std;
#define For(i,n) for(int i=1;i<=n;i++)
#define Fork(i,k,n) for(int i=k;i<=n;i++)
#define ForkD(i,k,n) for(int i=n;i>=k;i--)
#define Rep(i,n) for(int i=0;i<n;i++)
#define ForD(i,n) for(int i=n;i;i--)
#define RepD(i,n) for(int i=n;i>=0;i--)
#define Forp(x) for(int p=pre[x];p;p=next[p])
#define Forpiter(x) for(int &p=iter[x];p;p=next[p])
#define Lson (o<<1)
#define Rson ((o<<1)+1)
#define MEM(a) memset(a,0,sizeof(a));
#define MEMI(a) memset(a,0x3f,sizeof(a));
#define MEMi(a) memset(a,128,sizeof(a));
#define MEMx(a,b) memset(a,b,sizeof(a));
#define INF (0x3f3f3f3f)
#define F (998244353)
#define pb push_back
#define mp make_pair
#define fi first
#define se second
#define vi vector<int>
#define pi pair<int,int>
#define SI(a) ((a).size())
#define Pr(kcase,ans) printf("Case #%d: %lld\n",kcase,ans);
#define PRi(a,n) For(i,n-1) cout<<a[i]<<' '; cout<<a[n]<<endl;
#define PRi2D(a,n,m) For(i,n) { \For(j,m-1) cout<<a[i][j]<<' ';\cout<<a[i][m]<<endl; \}
#pragma comment(linker, "/STACK:102400000,102400000")
#define ALL(x) (x).begin(),(x).end()
#define gmax(a,b) a=max(a,b);
#define gmin(a,b) a=min(a,b);
typedef long long ll;
typedef long double ld;
typedef unsigned long long ull;
ll mul(ll a,ll b){return (a*b)%F;}
ll add(ll a,ll b){return (a+b)%F;}
ll sub(ll a,ll b){return ((a-b)%F+F)%F;}
void upd(ll &a,ll b){a=(a%F+b%F)%F;}
inline int read()
{int x=0,f=1; char ch=getchar();while(!isdigit(ch)) {if (ch=='-') f=-1; ch=getchar();}while(isdigit(ch)) { x=x*10+ch-'0'; ch=getchar();}return x*f;
}
ll a[3][112345];
int deg[112345];
set<pair<int,int> > h[112345];
int n;
ll ans[112345];
ll work() {n=read();For(i,n) ans[i]=deg[i]=0;For(j,2)For(i,n){int t=read();a[j][i]=t;deg[t]++;h[t].insert(mp(j,i));}queue<int> q;For(i,n) {if(!deg[i]) return 0;if(deg[i]==1) {q.push(i);}}while(!q.empty()) {int p=q.front();q.pop();deg[p]--;auto it = h[p].begin();auto pa=*it;h[p].erase(it);ans[pa.se]=p;int afi=3-pa.fi;int p2=a[afi][pa.se];deg[p2]--;h[p2].erase(mp(afi,pa.se));if(deg[p2]==0) return 0;else if(deg[p2]==1) q.push(p2);}ll aa=1;For(i,n) if(deg[i]==2) {int p=i,c=0;while(deg[p]>0) {deg[p]--;auto it = h[p].begin();auto pa=*it;h[p].erase(it);int afi=3-pa.fi;int p2=a[afi][pa.se];deg[p2]--;h[p2].erase(mp(afi,pa.se));p=p2;c+=2;}if(c==2) aa=mul(aa,n);else aa=mul(aa,2);}return aa;
}
int main()
{//  freopen("D.in","r",stdin);
//  freopen(".out","w",stdout);int T=read();while(T--){ll an=work();cout<<an<<endl;For(i,n) h[i].clear(); }return 0;
}

Good Bye 2022: 2023 is NEAR 题解相关推荐

  1. Good Bye 2022: 2023 is NEAR C. Koxia and Number Theory

    原题链接:Problem - C - Codeforces 题意: 给定一个长度为n的数组,请问是否存在一个数 x ,使得任意两个数 与满足 .若是输出 YES ,反之输出 NO . 思路: 我们可以 ...

  2. The 22nd Japanese Olympiad in Informatics (JOI 2022/2023) Final Round 题解

    交题:https://cms.ioi-jp.org/documentation A 给一个序列 a 1 , ⋯ , a n a_1,\cdots,a_n a1​,⋯,an​. 执行 n n n个操作, ...

  3. codeforces Good Bye 2022

    codeforces Good Bye 2022 A. Koxia and Whiteboards 题解 根据提意,每次对a数组最小元素的操作就好了,因为n,m的范围比较小,所以没必要用优先对列. # ...

  4. [开源工具]2022/2023免费临时邮箱(Temp Free Mail)

    2022/2023免费临时邮箱Temp Free Mail 1.10分钟邮箱 2.45分钟邮箱 3.60分钟邮箱 4.24小时邮箱 5.5日邮箱 6.其他临时邮箱 7.无时间限制临时邮箱 8.临时邮箱 ...

  5. [开源工具]2022/2023 分享好用的免费的云短信/临时短信[Temp Message]

    [开源工具]2022/2023 分享好用的免费云短信/临时短信[Temp Message] 什么是免费云短信? 免费云短信的优点? 如何使用免费云短信? 国内免费: 国外免费: 为何我输入了虚拟号码却 ...

  6. 2018/2019/2020/2021/2022/2023年度计划阅读书籍(持续更新)

    2018/2019/2020/2021/2022/2023年度计划阅读书籍 1. Java加密与解密的艺术(第二版) 作者:梁栋 在读 2. Spring源码深度解析 作者:郝佳 在读 3. 深入理解 ...

  7. 二维和三维CAD设计Autodesk AutoCAD中文2021/2022/2023

    Autodesk AutoCAD 是全球著名的专业计算机辅助设计软件,用于二维绘图.详细绘制.设计文档和基本三维设计,广泛应用于机械设计.工业制图.工程制图.土木建筑.装饰装潢.服装加工等多个行业领域 ...

  8. FinancesOnline 2022/2023 10大IT趋势预测

    在过去几十年的时间里,全世界的计算能力达到了万亿倍的增长.太空.军事和工业研究促成了范式的转变.与此同时,新冠肺炎大流行等不可预见的事件迫使人们去迎接新的技术,采用与以往不同的技术路径,这导致了IT趋 ...

  9. 宏电亮相中国城镇供水排水协会2022/2023年会暨城镇水务技术与产品交流展示

    2023年4月12日,中国城镇供水排水协会2022/2023年会暨城镇水务技术与产品交流展示在武汉国际博览中心盛大开幕.本届年会聚焦城镇水务行业现状及发展趋势,是围绕行业热点.难点.痛点问题,集行业分 ...

最新文章

  1. 【UML建模】机房中的UML图
  2. B1230 [Usaco2008 Nov]lites 开关灯 线段树
  3. matlab梯度检测,Matlab:关于梯度的一阶导数边缘检测
  4. 【深入理解JVM】JVM内存模型
  5. redis学习之数据结构与对象(一)
  6. android getwindow 在fragment不能使用,Android Fragment 布局使用 fitsSystemWindows = true 无效解决方案...
  7. java调用百度推送详解_Java 以 Post 方式实现百度 Sitemap 实时推送
  8. python之socket
  9. codevs4343 找回密码
  10. [CF353C]Find Maximum(贪心)
  11. 在linux系统下如何下载中文输入法,如何在linux系统下安装中文输入法
  12. (转贴)联想员工亲历联想大裁员:公司不是家
  13. 快速核对两个表格数据
  14. python与excel教程_Python对Excel操作教程
  15. 苹果怎么换行打字_微信新功能上线!安卓苹果都有!网友:再也不怕被刷屏了!!...
  16. 企业微信如何退出之前的公司
  17. 将B站缓存M4S文件转存为MP4
  18. 开源OA办公平台搭建教程:O2OA+Arduino实现物联网应用(五)
  19. 抖音2023剪映/达芬奇/AE/VEGAS等可用的LUTs预设
  20. 【解决】ImportError: {} doesn‘t contains class named ‘Exp‘

热门文章

  1. 谷歌正式开源其多语言跨平台加密库Tink
  2. 使用visio如何快速生成一个网格状图案,文档技巧!
  3. Unity (一) 下载与安装
  4. 【机器学习】SVR支持向量机回归
  5. busybox文件系统制作
  6. 有关AE2020中文版改为英文版的方法
  7. Type-infity Wasserstein Ball
  8. map获取所有的key并返回列表
  9. react06-RenderProps
  10. go语言下载gin失败解决方案