Koxia and Whiteboards

#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

#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 正在用三个长度为 Good Bye 2022: 2023 is NEAR 题解_c++的数组 Good Bye 2022: 2023 is NEAR 题解_c++_02 玩一个游戏。其中 Good Bye 2022: 2023 is NEAR 题解_c++_02中的每个元素都是 Good Bye 2022: 2023 is NEAR 题解_i++_04Good Bye 2022: 2023 is NEAR 题解_c++ 之间的整数。
游戏持续 Good Bye 2022: 2023 is NEAR 题解_c++ 轮。在第Good Bye 2022: 2023 is NEAR 题解_算法_07 轮中,她们进行以下操作:
Good Bye 2022: 2023 is NEAR 题解_数据结构_08Good Bye 2022: 2023 is NEAR 题解_c++_09 的可重集。
Koxia 从可重集 Good Bye 2022: 2023 is NEAR 题解_数据结构_08中选择一个元素并移除。
Mahiru 从可重集 Good Bye 2022: 2023 is NEAR 题解_数据结构_08 的剩余两个元素中选择一个元素。
Good Bye 2022: 2023 is NEAR 题解_#define_12是第 Good Bye 2022: 2023 is NEAR 题解_算法_07 轮中 Mahiru 选择的元素。如果Good Bye 2022: 2023 is NEAR 题解_#define_14 是一个排列 ,则 Koxia 获胜;否则 Mahiru 获胜。
现在,只有 Good Bye 2022: 2023 is NEAR 题解_算法_15Good Bye 2022: 2023 is NEAR 题解_数据结构_16 两个数组是已经确定的。作为 Koxia 的支持者,你希望选择合适的数组Good Bye 2022: 2023 is NEAR 题解_c++_17 使得 Koxia 获胜。计算这样的Good Bye 2022: 2023 is NEAR 题解_c++_17 的数量,输出其对998244353 取模后的结果。
Koxia 和 Mahiru 会以最优方式行动。

#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;
}