CodeForces: 360(div1)361(div2)

前言

361AB比较水
360AB都不错
C是dp好题(建议也看看洛谷官方题解)
D恶心数论题
E是神奇但不太难的水黑题

CF361A Levko and Table

Description\text{Description}Description

Levko 很喜欢幻方,他想构造一个长宽都是 nnn 且每行每列的和都是 kkk 的幻方,请你帮帮他.

Solution\text{Solution}Solution

每个 (i,i)(i,i)(i,i) 的点填 mmm 剩下全填 000 即可.
我写的是对角填 m−n+1m-n+1mn+1 其他地方填 111,但都是一个道理.

Code\text{Code}Code

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define debug(...) fprintf(stderr,__VA_ARGS__)
const int N=25;
#define r rand()
inline ll read(){ll x(0),f(1);char c=getchar();while(!isdigit(c)){if(c=='-')f=-1;c=getchar();}while(isdigit(c)){x=(x<<1)+(x<<3)+c-'0';c=getchar();}return x*f;
}
int n,m;int main(){#ifndef ONLINE_JUDGEfreopen("a.in","r",stdin);freopen("a.out","w",stdout);
#endifn=read();m=read();for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){if(i==j) printf("%d ",m-n+1);else printf("1 ");}putchar('\n');}
}

CF361B Levko and Permutation

Description\text{Description}Description

给定 n,kn,kn,k,你需要构造一个序列,使得集合 {i∣1≤i≤n,gcd(i,ai)>1}\{i|{1\le i \le n,gcd(i,a_i)>1}\}{i1in,gcd(i,ai)>1} 的元素个数恰好为 kkk.

Solution\text{Solution}Solution

首先,由于 111 必然不合法, k=nk=nk=n 时必然无解.

k<nk< nk<n时,对于 2≤i≤k+12\le i\le k+12ik+1我们让 ai=ia_i=iai=i,从而使其全部合法.
使 ak+2=1,a1=n,ai=i−1(k+3≤i≤n)a_{k+2}=1,a_1=n,a_i=i-1(k+3\le i\le n)ak+2=1,a1=n,ai=i1(k+3in),从而使剩下的全部元素均不合法.
注意特判 m=n−1m=n-1m=n1 的情况.

Code\text{Code}Code

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define debug(...) fprintf(stderr,__VA_ARGS__)
const int N=25;
#define r rand()
inline ll read(){ll x(0),f(1);char c=getchar();while(!isdigit(c)){if(c=='-')f=-1;c=getchar();}while(isdigit(c)){x=(x<<1)+(x<<3)+c-'0';c=getchar();}return x*f;
}
int n,m;int main(){#ifndef ONLINE_JUDGEfreopen("a.in","r",stdin);freopen("a.out","w",stdout);
#endifn=read();m=read();if(n==m){printf("-1");return 0;}printf("%d ",m==n-1?1:n);for(int i=2;i<=m+1;i++) printf("%d ",i);if(m!=n-1) printf("1 ");for(int i=m+3;i<=n;i++) printf("%d ",i-1);return 0;
}

CF360A Levko and Array Recovery

Description\text{Description}Description

有一个长度为 nnn 的序列 a1...na_{1...n}a1...n,对其进行 mmm 次操作,操作有两种:

  1. 1liridi1\space l_i\space r_i\space d_i1 li ri di:对于 li≤j≤ril_i\le j\le r_ilijriaj←aj+di.a_j\gets a_j+d_i.ajaj+di.
  2. 2lirimi2\space l_i\space r_i\space m_i2 li ri mi:查询 max⁡aj(li≤j≤ri).\max a_j(l_i\le j\le r_i).maxaj(lijri).

现在给出 n,mn,mn,m 和操作信息,请你构造出一种合法的序列或者报告无解.

Solution\text{Solution}Solution

设第 iii 个元素当前的增量为 addiadd_iaddi,每个元素初始的最大值为 mximx_imxi.
每次对于操作二,mxj←min⁡(mxj,mi−addj)(li≤j≤ri)mx_j\gets \min(mx_j,m_i-add_j)(l_i\le j\le r_i)mxjmin(mxj,miaddj)(lijri).
这样,把操作扫一遍就能求出所有元素的 mximx_imxi.
得出正确的 mximx_imxi 后,我们再扫一遍操作序列,对于每一次操作二,设 w=max⁡mxj(li≤j≤ri)w=\max mx_j(l_i\le j\le r_i)w=maxmxj(lijri).
由于第一次维护的原因,必然有 w≤miw\le m_iwmi.
w<miw< m_iw<mi,说明区间内的所有元素都达不到 mim_imi,报告无解.
如果扫到最后还没有无解,输出 mx1...nmx_{1...n}mx1...n 作为构造的序列.

Code\text{Code}Code

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define debug(...) fprintf(stderr,__VA_ARGS__)
const int N=5005;
inline ll read(){ll x(0),f(1);char c=getchar();while(!isdigit(c)){if(c=='-')f=-1;c=getchar();}while(isdigit(c)){x=(x<<1)+(x<<3)+c-'0';c=getchar();}return x*f;
}
int n,m;
int mx[N],add[N];
struct query{int op,l,r,x;
}q[N];
int main(){#ifndef ONLINE_JUDGEfreopen("a.in","r",stdin);freopen("a.out","w",stdout);
#endifn=read();m=read();memset(mx,0x3f,sizeof(mx));for(int i=1;i<=m;i++){q[i]=(query){(int)read(),(int)read(),(int)read(),(int)read()};if(q[i].op==1){for(int j=q[i].l;j<=q[i].r;j++) add[j]+=q[i].x;}else{for(int j=q[i].l;j<=q[i].r;j++) mx[j]=min(mx[j],q[i].x-add[j]);}}memset(add,0,sizeof(add));for(int i=1;i<=m;i++){if(q[i].op==1){for(int j=q[i].l;j<=q[i].r;j++) add[j]+=q[i].x;}else{int o=-2e9;for(int j=q[i].l;j<=q[i].r;j++) o=max(o,mx[j]+add[j]);if(o!=q[i].x){printf("NO\n");return 0;}//printf("i=%d o=%d\n",i,o);}}printf("YES\n");for(int i=1;i<=n;i++) printf("%d ",min(mx[i],1000000000));return 0;
}

CF360B Levko and Array

Description\text{Description}Description

给出一个序列 a1...na_{1...n}a1...n,可以修改 kkk 个值,最小化 max⁡∣ai−ai+1∣(1≤i<n)\max|a_i-a_{i+1}|(1\le i<n)maxaiai+1(1i<n).
k≤n≤2000k\le n\le 2000kn2000

Solution\text{Solution}Solution

很巧妙的一道题.
容易想到二分答案,关键就是如何判断合法.
正难则反,改为保留至少 n−kn-knk 个数不变.
设计 dpidp_idpi 表示 [1,i][1,i][1,i] 区间中保留 iii 的前提下保留数的最多个数.
转移则是:
dpi=max⁡dpj+1(j<i,∣ai−aj∣≤(j−i)×d)dp_i=\max dp_j+1(j<i,|a_i-a_j|\le(j-i)\times d)dpi=maxdpj+1(j<i,aiaj(ji)×d)
暴力 n2n^2n2 转移即可通过.

Code\text{Code}Code

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define debug(...) fprintf(stderr,__VA_ARGS__)
const int N=6005;
inline ll read(){ll x(0),f(1);char c=getchar();while(!isdigit(c)){if(c=='-')f=-1;c=getchar();}while(isdigit(c)){x=(x<<1)+(x<<3)+c-'0';c=getchar();}return x*f;
}
int n,m;
ll a[N];
int dp[N];
bool check(ll x){for(int i=1;i<=n;i++){dp[i]=1;for(int j=1;j<i;j++){if(abs(a[i]-a[j])<=1ll*(i-j)*x) dp[i]=max(dp[i],dp[j]+1);}if(dp[i]+m>=n) return true;}return false;
}
int main(){#ifndef ONLINE_JUDGEfreopen("a.in","r",stdin);freopen("a.out","w",stdout);
#endifn=read();m=read();for(int i=1;i<=n;i++) a[i]=read();ll st=0,ed=2e9;while(st<ed){ll mid=(st+ed)>>1;if(check(mid)) ed=mid;else st=mid+1;}printf("%lld\n",st);return 0;
}

CF360C Levko and Strings

Description\text{Description}Description

给一个为 nnn 的只有小写字母组成的串 sss,定义它与一个长度为 nnn 的串 ttt 的美丽度为:存在多少个二元组 (i,j)1≤i≤j≤n(i,j) \ 1\leq i \leq j \leq n(i,j) 1ijn 满足 si...j<ti...js_{i...j}<t_{i...j}si...j<ti...j,这里的’<'是字典序比较。求有多少个 ttt,使得 sssttt 的美丽度为 kkk.
n,k≤2000n,k \leq 2000n,k2000

Solution\text{Solution}Solution

很好的 DP 题.
一种不太一样的做法.
容易想到设计 dpi,jdp_{i,j}dpi,j 表示 [1...i][1...i][1...i] 已经确定的二元组有 jjj 个的方案数.
upiup_iupi 为大于 sis_isi 的字符数,设 botibot_iboti 为小于 sis_isi 的字符数.

对于第 iii 位填不同于 sis_isi 的字符时,比较容易写出转移:

  1. ti<sit_i<s_iti<si 时,合法二元组数量不变,所以有:
    boti×dpi−1,j→dpi,jbot_i\times dp_{i-1,j}\to dp_{i,j}boti×dpi1,jdpi,j
  2. ti>sit_i>s_iti>si 时,对于任意的 i≤j≤ni\le j\le nijn(i,j)(i,j)(i,j) 都是合法的二元组,一共增加了 n−i+1n-i+1ni+1 个,所以有:
    upi×dpi−1,j→dpi,j+(n−i+1)up_i\times dp_{i-1,j}\to dp_{i,j+(n-i+1)}upi×dpi1,jdpi,j+(ni+1)

接下来就是 si=tis_i=t_isi=ti 的情况,相对比较麻烦.

还是分情况来讨论.

  1. 连续多位相等,到某一位 tk<skt_k<s_ktk<sk。合法二元组不变,则有:
    botk×dpi−1,j→dpk,j(i<k≤n)bot_k\times dp_{i-1,j}\to dp_{k,j}(i<k\le n)botk×dpi1,jdpk,j(i<kn)

暴力统计显然会 T,但是可以开一个 sumsumsum 数组然后把 dpi,jdp_{i,j}dpi,j 加到 sumjsum_jsumj 里面,统计到后面的时候把 sumjsum_jsumj 里所有的值统计起来即可.

  1. 连续多位相等,到某一位 tk>skt_k>s_ktk>sk。对于 i≤a≤k,k≤b≤ni\le a\le k,k\le b\le niak,kbn(a,b)(a,b)(a,b) 都是合法的二元组,增加的二元组数量是 (k−i+1)×(n−k+1)(k-i+1)\times (n-k+1)(ki+1)×(nk+1),所以有:
    upk×dpi−1,j→dpk,j+(k−i+1)×(n−k+1)(i<k≤n)up_k\times dp_{i-1,j}\to dp_{k,j+(k-i+1)\times (n-k+1)}(i<k\le n)upk×dpi1,jdpk,j+(ki+1)×(nk+1)(i<kn)

这个想用类似情况 111 的方法统计比较困难,但是我们发现,在 n−in-ini 较大时,增加二元组的数量是一个关于 kkk 的二次单峰函数,由于 mmm 只有 O(n)O(n)O(n) 级别,所以有效的转移非常少。我们可以从两边暴力转移,增量超过 mmm 就 break 即可.

  1. 不要忘记还有可能始终到最后都相等,可以直接:
    dpi,j→dpn,jdp_{i,j}\to dp_{n,j}dpi,jdpn,j

Code\text{Code}Code

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define debug(...) fprintf(stderr,__VA_ARGS__)
const int N=2005;
const int mod=1e9+7;
inline ll read(){ll x(0),f(1);char c=getchar();while(!isdigit(c)){if(c=='-')f=-1;c=getchar();}while(isdigit(c)){x=(x<<1)+(x<<3)+c-'0';c=getchar();}return x*f;
}
int n,m;
char s[N];
ll dp[N][N],botsum[N];
ll c[N];
int main(){#ifndef ONLINE_JUDGEfreopen("a.in","r",stdin);freopen("a.out","w",stdout);
#endif//debug("%d\n",(int)sizeof(dp)/1024/1024);n=read();m=read();scanf(" %s",s+1);dp[0][0]=1;for(int i=1;i<=n;i++){for(int j=0;j<=m;j++){int bot=s[i]-'a',up='z'-s[i];      (dp[i][j]+=bot*botsum[j])%=mod;(dp[i][j]+=bot*dp[i-1][j])%=mod;if(j-(n-i+1)>=0){(dp[i][j]+=up*dp[i-1][j-(n-i+1)])%=mod;	}//printf("i=%d j=%d bot=%d up=%d dp=%lld\n",i,j,bot,up,dp[i][j]);}for(int j=0;j<=m;j++){(botsum[j]+=dp[i-1][j])%=mod;      (dp[n][j]+=dp[i-1][j])%=mod;int l=i+1,r=n;for(;l<=n;l++){int add=(l-i+1)*(n-l+1);if(j+add>m) break;(dp[l][j+add]+=('z'-s[l])*dp[i-1][j])%=mod;}for(;r>l;r--){int add=(r-i+1)*(n-r+1);if(j+add>m) break;(dp[r][j+add]+=('z'-s[r])*dp[i-1][j])%=mod;}}}printf("%lld\n",dp[n][m]);return 0;
}
/*
3 3
tsy
*/

CF360D Levko and Sets

Description\text{Description}Description

有两个整数数组 a1,a2......ana_1,a_2......a_na1,a2......anb1,b2......bmb_1,b_2......b_mb1,b2......bm,与一个质数 ppp ,现在要生成 nnn 个集合,第 iii 个集合生成方式如下:

  1. 开始,集合只有元素 111.
  2. 从集合中选一个元素 ccc ,对于所有的 jjj ,如果满足 (c×aibj)%p(c\times a_i^{b_j})\%p(c×aibj)%p 不在当前集合,就把它加入集合.
  3. 重复以上步骤.

nnn 个集合的并的大小.
n≤104,m≤105,p≤109n\le 10^4,m\le 10^5,p\le 10^9n104,m105,p109
ai≤p,bi≤109a_i\le p,b_i\le10^9aip,bi109

Solution\text{Solution}Solution

题意简化一下就是集合里的元素是 aia_iai 的(bib_ibi组合相加)次幂模 ppp 的结果.
ϕ=p−1,g=gcd⁡(ϕ,gcd⁡i=1mbi)\phi=p-1,g=\gcd(\phi,\gcd_{i=1}^m b_i)ϕ=p1,g=gcd(ϕ,gcdi=1mbi),那么第 iii 个集合可以等价为:
{aikg(modp)∣k∈N}\{a_i^{kg}(mod\space p)|k\in N\}{aikg(mod p)kN}
cic_ici 为最小的 kkk,满足 aigci=1(modp)a_i^{gc_i}=1(mod\space p)aigci=1(mod p)cic_ici 必然是 ϕ\phiϕ 的因子,可以预处理出 ϕ\phiϕ 的因子后暴力求出.
那么这个集合可以等价为:
{1,aig,ai2g,...,ai(ci−1)g}\{1,a_i^{g},a_i^{2g},...,a_i^{(c_i-1)g}\}{1,aig,ai2g,...,ai(ci1)g}
RRRppp 的原根,那么上面的集合等价于:
{R0,Rϕci,R2×ϕci,...,R(ci−1)×ϕci}\large \{R^0,R^{\frac{\phi}{c_i}},R^{2\times \frac{\phi}{c_i}},...,R^{(c_i-1)\times \frac{\phi}{c_i}}\}{R0,Rciϕ,R2×ciϕ,...,R(ci1)×ciϕ}
那么问题就转化为了给出一个数列 c1...nc_{1...n}c1...n ,求 [1,ϕ][1,\phi][1,ϕ] 之间由 ccc 数列筛出的数的个数,其中 cic_ici 均是 ϕ\phiϕ 的因子.
fxf_xfxxxx 筛掉的数的个数.
就有
fx=ϕx−∑fkxf_x=\frac{\phi}{x}-\sum f_{kx}fx=xϕfkx
由于所有的 cic_ici 都是 ϕ\phiϕ 的因数,所以也只枚举 ϕ\phiϕ 的因数即可.
最后的答案就是把所有是 cic_ici 倍数的 xxxfxf_xfx 加起来.

Code\text{Code}Code

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define debug(...) fprintf(stderr,__VA_ARGS__)
const int N=2e5+100;
inline ll read(){ll x(0),f(1);char c=getchar();while(!isdigit(c)){if(c=='-')f=-1;c=getchar();}while(isdigit(c)){x=(x<<1)+(x<<3)+c-'0';c=getchar();}return x*f;
}
int n,m;
int mod;
inline ll ksm(ll x,ll k){ll res(1);while(k){if(k&1) res=res*x%mod;x=x*x%mod;k>>=1;}return res;
}
ll gcd(ll a,ll b){return b?gcd(b,a%b):a;}
int a[N],b[N],c[N],g;
int pd[N],tot;
int f[N];
int main(){#ifndef ONLINE_JUDGEfreopen("a.in","r",stdin);freopen("a.out","w",stdout);
#endifn=read();m=read();mod=read();int phi=mod-1;g=phi;for(int i=1;i<=n;i++) a[i]=read();for(int i=1;i<=m;i++) b[i]=read(),g=gcd(g,b[i]);  for(int i=1;i*i<=phi;i++){if(phi%i) continue;pd[++tot]=i;if(i*i<phi) pd[++tot]=phi/i;}sort(pd+1,pd+1+tot);for(int i=1;i<=n;i++){int d=ksm(a[i],g);for(int j=1;j<=tot;j++){if(ksm(d,pd[j])==1){c[i]=phi/pd[j];break;}}//printf("i=%d c=%d\n",i,c[i]);}int res(0);for(int i=tot;i>=1;i--){bool flag=0;for(int j=1;j<=n;j++){if(pd[i]%c[j]==0){flag=1;break;}}if(!flag) continue;f[i]=phi/pd[i];for(int j=i+1;j<=tot;j++){if(pd[j]%pd[i]==0) f[i]-=f[j];}res+=f[i];}printf("%d\n",res);return 0;
}
/*
3 3
tsy
*/

CF360E Levko and Game

Description\text{Description}Description

你和你的朋友在一张有 nnnn≤104n\le 10^4n104)个点, m+km+km+km≤104,k≤100m \le 10^4,k\le 100m104,k100)条边的带权有向图上玩一个游戏.

一开始你们分别处在 S1S_1S1S2S_2S2 上,你们需要到达 TTT.

你可以将给定的 kkk 条边的权值修改为 [L,R][L,R][L,R] 中任何数.

问你是否能先到达 TTT,如果不能,能否达成平局.
n,m≤104,k≤100n,m\le 10^4,k\le 100n,m104,k100

Solution\text{Solution}Solution

一开始把所有边的权都设成最大.
对于一条边 (u→v)(u\to v)(uv),若 dis1u≤dis1vdis1_u\le dis1_vdis1udis1v,就把它的边权设成最小,因为如果 B 想用这条边,必败无疑.
改权后可能 disdisdis 的关系发生变化,重新跑 Dijkstra,再次判断即可.
复杂度 O(nk)O(nk)O(nk).

Code\text{Code}Code

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define debug(...) fprintf(stderr,__VA_ARGS__)
const int N=1e4+100;
inline ll read(){ll x(0),f(1);char c=getchar();while(!isdigit(c)){if(c=='-')f=-1;c=getchar();}while(isdigit(c)){x=(x<<1)+(x<<3)+c-'0';c=getchar();}return x*f;
}
int n,m,k;
struct node{int to,nxt,frm,w;
}p[N<<1];
int fi[N],cnt;
inline void addline(int x,int y,int w){p[++cnt]=(node){y,fi[x],x,w};fi[x]=cnt;return;
}
int id[105];
int u[105],v[105],l[105],r[105];
int s1,s2,t;
ll dis1[N],dis2[N];
bool vis[N];
#define pr pair<int,ll>
#define mkp make_pair
priority_queue<pr,vector<pr>,greater<pr> >q;
void dij(ll *dis,int s){memset(vis,0,sizeof(vis));dis[s]=0;q.push(mkp(0,s));while(!q.empty()){int now=q.top().second;q.pop();if(vis[now]) continue;vis[now]=1;for(int i=fi[now];~i;i=p[i].nxt){int to=p[i].to;if(dis[to]>dis[now]+p[i].w){dis[to]=dis[now]+p[i].w;q.push(mkp(dis[to],to));}}}return;
}
int main(){#ifndef ONLINE_JUDGEfreopen("a.in","r",stdin);freopen("a.out","w",stdout);
#endifmemset(fi,-1,sizeof(fi));cnt=-1;n=read();m=read();k=read();s1=read();s2=read();t=read();for(int i=1;i<=m;i++){int x=read(),y=read(),w=read();addline(x,y,w);}for(int i=1;i<=k;i++){u[i]=read(),v[i]=read(),l[i]=read(),r[i]=read();addline(u[i],v[i],r[i]);id[i]=cnt;}while(1){int f=0;memset(dis1,0x3f,sizeof(dis1));memset(dis2,0x3f,sizeof(dis2));dij(dis1,s1);dij(dis2,s2);for(int i=1;i<=k;i++){if(p[id[i]].w!=l[i]&&dis1[u[i]]<dis2[u[i]]){f=1;p[id[i]].w=l[i];break;}}if(!f) break;}memset(dis1,0x3f,sizeof(dis1));memset(dis2,0x3f,sizeof(dis2));dij(dis1,s1);dij(dis2,s2);if(dis1[t]>dis2[t]) printf("LOSE");else{if(dis1[t]==dis2[t]) printf("DRAW\n");else printf("WIN\n");for(int i=1;i<=k;i++) printf("%d ",p[id[i]].w);}return 0;
}
/*
3 3
tsy
*/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/317310.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数论三之排列组合Ⅱ——Virus Tree 2,RGB Coloring,123 Triangle,排列计数,排队,卡农

丝且人一口Virus Tree 2descriptionsolutioncodeRGB Coloringdescriptionsolutioncode123 Triangledescriptionsolutioncode[SDOI2016]排列计数descriptionsolutioncode[HNOI2012]排队descriptionsolutioncode[HNOI2011]卡农descriptionsolutioncodeVirus Tree 2 description …

B - Labyrinth Gym - 102798B

B - Labyrinth Gym - 102798B 题意&#xff1a; n * m的地图&#xff0c;有k个障碍物&#xff0c;给你起点到终点&#xff0c;从起点到终点的最短距离 1<n,m<200000 nm<200000 0<k<42 1<q<100000 题解&#xff1a; 如果没有障碍物&#xff0c;两点之间…

P2483-[模板]k短路/[SDOI2010]魔法猪学院【主席树,堆】

正题 题目链接:https://www.luogu.com.cn/problem/P2483 题目大意 给出一个nnn个点mmm条边的一张带权有向图&#xff0c;求一个最大的kkk使得1∼n1\sim n1∼n的前kkk短路径长度和不超过EEE。 2≤n≤5000,1≤m≤2105,1≤E≤1072\leq n\leq 5000,1\leq m\leq 2\times 10^5,1\le…

.NET Core开发日志——OData

简述OData&#xff0c;即Open Data Protocol&#xff0c;是由微软在2007年推出的一款开放协议&#xff0c;旨在通过简单、标准的方式创建和使用查询式及交互式RESTful API。类库在.NET Core中想要使用OData功能的话需要添加Microsoft.AspNetCore.OData包。dotnet add package M…

数论四之综合训练——Magic Pairs,Crime Management,Top Secret,组合数问题

数论综合训练Magic PairsproblemsolutioncodeCF107D Crime ManagementproblemsolutioncodeUVA12183 Top SecretproblemsolutioncodeP3746 [六省联考2017]组合数问题problemsolutioncodeMagic Pairs problem 已知A0xB0y≡0(modn)A_0xB_0y\equiv 0\pmod nA0​xB0​y≡0(modn)恒…

P6776-[NOI2020]超现实树

正题 题目链接:https://www.luogu.com.cn/problem/P6776 题目大意 定义一次操作为将一棵树的叶子换成另一棵树。 定义一棵树TTT的grow(T)grow(T)grow(T)表示所有树TTT能够通过操作变成的树的集合。 现在给出mmm棵树TiT_iTi​&#xff0c;定义SSS为所有grow(Ti)grow(T_i)grow…

CodeForces:749(div1)750(div2)

文章目录前言CF450A Jzzhu and ChildrenDescription\text{Description}DescriptionSolution\text{Solution}SolutionCode\text{Code}CodeCF450B Jzzhu and SequencesDescription\text{Description}DescriptionSolution\text{Solution}SolutionCode\text{Code}CodeCF449A Jzzhu …

Steins;Game Gym - 102798J(未解决)

Steins;Game Gym - 102798J 题意&#xff1a; 给定n堆石子a&#xff0c;每堆石子被染成了黑色或者白色&#xff0c;现在两个人轮流进行以下的其中一个操作&#xff1a; 1、从石子数量最少的一个黑色石堆中拿走若干石子 2、从任意一个白色石堆中拿走若干石子 两个人都采取最优…

ML.NET 0.10特性简介

IDataView被单独作为一个类库包IDataView组件为表格式数据提供了非常高效的处理方式&#xff0c;尤其是用于机器学习和高级分析应用。它被设计为可以高效地处理高维数据和大型数据集。并且也适合处理属于更大的分布式数据集中的单个数据区块结点。在ML.NET 0.10中&#xff0c;I…

模板:模拟退火

文章目录前言解析流程示例代码trick所谓模拟退火&#xff0c;就是通过代码模拟退火 &#xff08;逃&#xff09; 前言 终于学了这个神奇的骗分算法 几次在大赛中都发现这算法是真的有学的必要 FFC可能真的要想想自己的题目对OI界的导向作用了 但学完以后还是感觉挺有意思的&a…

讨“动态规划“檄

我一直遵循着人不犯我我不犯人的原则&#xff0c;但是鉴于动态规划(dp)三番两次的挑衅&#xff0c;我忍无可忍决定发起反击&#xff0c;特写本文记录一下。 (本文整理一下以前做过的dp问题&#xff0c;并且把之前囤的大量dp都做做) acwing提高组 第一章 动态规划 背包模型题目集…

数论五之容斥——硬币购物,Gerald and Giant Chess,幸运数字,Sky Full of Stars,已经没有什么好害怕的了

容斥的神[HAOI2008]硬币购物problemsolutioncodeCF559C Gerald and Giant Chessproblemsolutioncode[SCOI2010]幸运数字problemsolutioncodeCF997C Sky Full of Starsproblemsolutioncode已经没有什么好害怕的了problemsolutioncode[JLOI2015]骗我呢problemsolutioncode容斥要么…

P4769-[NOI2018]冒泡排序【组合数学,树状数组】

正题 题目链接:https://www.luogu.com.cn/problem/P4769 题目大意 有一个冒泡排序的算法 输入&#xff1a;一个长度为 n 的排列 p[1...n] 输出&#xff1a;p 排序后的结果。 for i 1 to n dofor j 1 to n - 1 doif(p[j] > p[j 1])交换 p[j] 与 p[j 1] 的值然后给出一…

NET Core微服务之路:基于Ocelot的API网关Relay实现--RPC篇

前言我们都知道&#xff0c;API网关是工作在应用层上网关程序&#xff0c;为何要这样设计呢&#xff0c;而不是将网关程序直接工作在传输层、或者网络层等等更底层的环境呢&#xff1f;让我们先来简单的了解一下TCP/IP的五层模型。&#xff08;图片出自http://www.cnblogs.com/…

模板:长链剖分

所谓长链剖分&#xff0c;就是对长链进行剖分 &#xff08;逃&#xff09; 前言 很优雅的算法 利用对指针进行魔法操作将 n2n^2n2 的 dp 优化成线性 线性啊&#xff01;&#xff01;&#xff01; 解析 CF1009F Dominant Indices 给定一棵以 111 为根&#xff0c;nnn 个节点…

acwing 327. 玉米田

327. 玉米田 题意&#xff1a; m * n的土地&#xff0c;有的土地不育&#xff0c;有的可以种植&#xff0c;要求相邻的土地不能同时种植玉米&#xff0c;问有多少种种植方式 题解&#xff1a; 状压dp&#xff0c;先存每一行可能的状态&#xff0c;然后状态转移&#xff0c;…

Windows 10《描图》应用现已开源

点击上方蓝字关注“汪宇杰博客”《描图》是我最早的Windows 10应用&#xff0c;发布至今已3年多&#xff0c;积累了全球数百万用户&#xff0c;广受好评。现已开源。这款应用为不少小朋友带去了欢乐&#xff0c;体验绘画的乐趣&#xff0c;也帮助过专业用户复刻数百幅古代绘画。…

数论六之计算几何干货——计算几何模板解释全集 及 模板检验训练场

文章目录点和向量及运算直线和线段求解点到直线的距离/点在直线上求解点到线段的距离/点在线段上求解两条线段是否相交求解两直线的交点多边形求解多边形面积求解多边形重心求解判断定点与多边形的位置关系凸包graham扫描法graham扫描法加强版圆求解圆与直线的交点求解圆与圆的…

P7740-[NOI2021]机器人游戏【dp,bitset】

正题 题目链接:https://www.luogu.com.cn/problem/P7740 题目描述 题目大意摸了 小 R 有 mmm&#xff08;1≤m≤10001 \le m \le 10001≤m≤1000&#xff09;个机器人和 mmm 张纸带&#xff0c;第 iii&#xff08;1≤i≤m1 \le i \le m1≤i≤m&#xff09;个机器人负责对第 …

CodeForces:54

文章目录前言CF54A PresentsDescription\text{Description}DescriptionSolution\text{Solution}SolutionCF54B Cutting Jigsaw PuzzleDescription\text{Description}DescriptionSolution\text{Solution}SolutionCode\text{Code}CodeCF54C First Digit LawDescription\text{Desc…