CF788789(div1div2)

前言

789 AB比较水,但是B分情况讨论也可以锻炼严谨思维
788ABC都是码量小也不太难的小清新题,C比较令人耳目一新
788D的思路让人难以想到
788E标准的大数据结构题

CF789A Anastasia and pebbles

Description\text{Description}Description

Anastasia喜欢去公园收集石子.她有 222 个口袋,每个口袋最多装 kkk 个石子.

但她每天只去公园 111 次,而且每次同一个口袋里只装同一种石子.问要装完 nnn 种石子共要花多少天?

输入 nnn,以及每一种石子的数量 wiw_iwi. 输出上述所求答案.

1≤n≤100000;1≤k≤1000000000;1≤wi≤100001\le n\le 100000;1\le k\le 1000000000; 1\le w_i\le100001n100000;1k1000000000;1wi10000

Solution\text{Solution}Solution

求出每种石子需要几袋子装,全部加起来除以二上取整即可.

Code\text{Code}Code

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define double long double 
#define ull unsigned long long
#define debug(...) fprintf(stderr,__VA_ARGS__)
const int N=2e5+100;
const double eps=1e-12;
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;
}ll n,m,k;
ll x[N],a[N],sum[N];
ll mn,mx,ans;
signed main(){
#ifndef ONLINE_JUDGEfreopen("a.in","r",stdin);freopen("a.out","w",stdout);
#endifn=read();for(int i=1;i<=n;i++) x[i]=read();for(int i=1;i<n;i++) a[i]=abs(x[i]-x[i+1])*((i&1)?1:-1);for(int i=1;i<n;i++){sum[i]=sum[i-1]+a[i];if(i&1) ans=max(ans,sum[i]-mn);else ans=max(ans,mx-sum[i]);mx=max(mx,sum[i]);mn=min(mn,sum[i]);}printf("%lld\n",ans);return 0;
}
/**/

CF789B Masha and geometric depression

Description\text{Description}Description

给你一个等比数列,首项为 b1b_1b1,公比为 qqq.
现在Masha在黑板上从首项开始书写这个等比数列,直到数列某项的绝对值大于 lll,给定 mmm 个整数,若该等比数列中的某项等同于这 mmm 个整数,则不会被写出.
问Masha会写出多少个数字?如果她会写出无穷多个数字,输出inf.
注意: b1,qb1,qb1,q 可能为000.

Solution\text{Solution}Solution

大特判题.
特判一下公差等于 0/1/−10/1/-10/1/1,首项等于 000 的情况,其他的暴力算即可.
需要开 longlong.

Code\text{Code}Code

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define double long double 
#define ull unsigned long long
#define debug(...) fprintf(stderr,__VA_ARGS__)
const int N=2e5+100;
const double eps=1e-12;
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,mx;
ll d,x;
map<ll,bool>mp;
int ans;
signed main(){
#ifndef ONLINE_JUDGEfreopen("a.in","r",stdin);freopen("a.out","w",stdout);
#endifx=read();d=read();mx=read();n=read();for(int i=1;i<=n;i++) mp[read()]=1;if(abs(x)>mx){printf("0");return 0;}if(d==0){if(mp[0]) printf("%d",!mp[x]);else printf("inf");}else if(d==1){if(mp[x]) printf("0");else printf("inf");}else if(d==-1){if(mp[x]&&mp[-x]) printf("0");else printf("inf");}else if(x==0){if(mp[0]) printf("0");else printf("inf");}else{while(abs(x)<=mx){if(!mp[x]) ++ans;x*=d;}printf("%d\n",ans);}return 0;
}
/**/

CF788A Functions again

Description\text{Description}Description

定义一个函数,函数如下:
f[l,r]=∑i=lr−1∣ai−ai+1∣×(−1)i−lf[l,r]=\sum^{r-1}_{i=l}|a_i-a_{i+1}|\times (-1)^{i-l}f[l,r]=i=lr1aiai+1×(1)il. (1≤l,r≤n1\le l,r\le n1l,rn)
∣x∣|x|x 表示 xxx 的绝对值.
现在给你一个函数,请取恰当的 l,rl,rl,r 使 fff 值最大,请输出最大的 fff 值.
2≤n≤1052\le n\le 10^52n105

Solution\text{Solution}Solution

先求出差分数组的绝对值 d1...n−1d_{1...n-1}d1...n1.
定义:
sumi=∑j=1idj×(−1)j+1sum_i=\sum_{j=1}^i d_j\times(-1)^{j+1}sumi=j=1idj×(1)j+1
那么我们的 fl,rf_{l,r}fl,r 就可以表示为:
(−1)r+1×(sumr−suml−1)(-1)^{r+1}\times (sum_r-sum_{l-1})(1)r+1×(sumrsuml1)
所以从前往后扫分别记录 sumsumsum 的最大值和最小值即可.

Description\text{Description}Description

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define double long double 
#define ull unsigned long long
#define debug(...) fprintf(stderr,__VA_ARGS__)
const int N=2e5+100;
const double eps=1e-12;
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;
}ll n,m,k;
ll x[N],a[N],sum[N];
ll mn,mx,ans;
signed main(){
#ifndef ONLINE_JUDGEfreopen("a.in","r",stdin);freopen("a.out","w",stdout);
#endifn=read();for(int i=1;i<=n;i++) x[i]=read();for(int i=1;i<n;i++) a[i]=abs(x[i]-x[i+1])*((i&1)?1:-1);for(int i=1;i<n;i++){sum[i]=sum[i-1]+a[i];if(i&1) ans=max(ans,sum[i]-mn);else ans=max(ans,mx-sum[i]);mx=max(mx,sum[i]);mn=min(mn,sum[i]);}printf("%lld\n",ans);return 0;
}
/**/

CF788B Weird journey

Description\text{Description}Description

总共有 nnn 个节点,mmm 条路径,要求其中 m−2m-2m2 条路径走两遍,剩下 222 条路径仅走一遍,问不同的路径总数有多少,如果仅走一遍的两条边不同则将这两条路径视为不同.
n,m≤106n,m\le10^6n,m106

Solution\text{Solution}Solution

把每条边拆成两个一样的边,考虑欧拉回路的条件.
由于拆了边,显然每个点的度数都是偶数.
所以选择的两条边必须含有公共端点.
考虑自环如何处理.
删掉自环后该点的度数还是偶数,所以剩下的一条边随便删即可.
细节上,需要判断含有边的点必须连通.

Code\text{Code}Code

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define double long double 
#define ull unsigned long long
#define debug(...) fprintf(stderr,__VA_ARGS__)
const int N=1e6+100;
const double eps=1e-12;
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 du[N];
int fa[N],tag[N];
ll num;
int find(int x){return x==fa[x]?x:fa[x]=find(fa[x]);}
signed main(){
#ifndef ONLINE_JUDGEfreopen("a.in","r",stdin);freopen("a.out","w",stdout);
#endifn=read();m=read();for(int i=1;i<=n;i++) fa[i]=i;for(int i=1;i<=m;i++){int x=read(),y=read();fa[find(x)]=find(y);tag[x]=tag[y]=1;if(x==y){++num;continue;}++du[x];++du[y];}int cnt(0);for(int i=1;i<=n;i++){cnt+=(find(i)==i&&tag[i]!=0);}if(cnt>1||m<2){printf("0");return 0;}ll ans(0);for(int i=1;i<=n;i++){ans+=1ll*du[i]*(du[i]-1)/2;//printf("i=%d du=%d ans=%lld\n",i,du[i],ans);}ans+=num*(m-num)+num*(num-1)/2;printf("%lld\n",ans);return 0;
}
/**/

CF788C The Great Mixing

Description\text{Description}Description

kkk 种可乐,第 iii 瓶可乐的 CO2 浓度是 ai1000\frac{a_i}{1000}1000ai,问要配置出浓度 n1000\frac{n}{1000}1000n 的可乐,最少需要几瓶可乐.
无解输出 −1-11.
0≤n≤1000,k≤1060\le n\le 1000,k\le10^60n1000,k106

Solution\text{Solution}Solution

不难想到把所以值减 nnn 然后转化为加和为 000 的问题.
我的做法是正负两边暴力背包,值域在最差的情况下是 500×499500\times499500×499.
然后就 3×1053\times 10^53×105艹过去了…

现在讲讲 n2n^2n2 的正解.
考虑 bfs.
000 开始,向外寻找.
把边界设为 100010001000 即可.
为什么这么是对的?
设答案的组合为 x1+x2+...xk=0x_1+x_2+...x_k=0x1+x2+...xk=0.
不难发现,通过调整前后顺序,一定可以使序列 xxx 的任意一个前缀和的绝对值均不超过 100010001000,那么这个调整后的序列就可以被 bfs 搜到.
因此这样做是正确的.

Code\text{Code}Code

代码还是之前的暴力背包
bfs 不难实现,留给读者自行思考

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define double long double 
#define ull unsigned long long
#define debug(...) fprintf(stderr,__VA_ARGS__)
const int N=1e6+100;
const double eps=1e-12;
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,k;
int a[1050],b[1050],x,y;
int o=3e5;
int w[N];
int f1[300050],f2[300050];
signed main(){
#ifndef ONLINE_JUDGEfreopen("a.in","r",stdin);freopen("a.out","w",stdout);
#endifn=read();k=read();for(int i=1;i<=k;i++) w[i]=read();sort(w+1,w+1+k);k=unique(w+1,w+1+k)-w-1;for(int i=1;i<=k;i++){w[i]-=n;if(w[i]==0){printf("1");return 0;}else if(w[i]>0) a[++x]=w[i];else b[++y]=-w[i];}if(!x||!y){printf("-1");return 0;}memset(f1,0x3f,sizeof(f1));f1[0]=0;for(int i=1;i<=x;i++){int w=a[i];for(int j=w;j<=o;j++) f1[j]=min(f1[j],f1[j-w]+1);}memset(f2,0x3f,sizeof(f2));f2[0]=0;for(int i=1;i<=y;i++){int w=b[i];for(int j=w;j<=o;j++) f2[j]=min(f2[j],f2[j-w]+1);}int ans=2e9;for(int i=1;i<=o;i++) ans=min(ans,f1[i]+f2[i]);printf("%d\n",ans);return 0;
}
/**/

CF788D Finding lines

Description\text{Description}Description

有一个平面,上面有一些水平或竖直的直线.
你每次可以选择一个点,询问距离该点最近的直线到该点的距离.
请求出所有的直线的横/纵坐标.
总直线数不超过 10410^4104.
坐标范围不超过 10810^8108.(询问的点也不能超过该范围)

Solution\text{Solution}Solution

思路很妙的一道题.
不难想到利用 分治.
如何设计分治状态是本题的关键.
第一感似乎是设计 solve(x1,x2,y1,y2)solve(x1,x2,y1,y2)solve(x1,x2,y1,y2) 表示寻找横坐标在 (x1,x2)(x1,x2)(x1,x2) 和纵坐标在 (y1,y2)(y1,y2)(y1,y2) 的直线,然后找到这个矩形的中点尝试.
但是这样分治的两个子结构不互相独立,左边找到的直线也会影响右边,难以处理.
别问我为什么知道难以处理
所以我们要尝试一些特别的设计.
设计 solve(l,r)solve(l,r)solve(l,r) 表示解决坐标在 (l,r)(l,r)(l,r) 的直线(同时包括横纵坐标).
询问中点 (mid,mid)(mid,mid)(mid,mid) .

  1. 若距离为 000,说明有线经过该点,记录该位置并递归 solve(l,mid−1),solve(mid+1,r)solve(l,mid-1),solve(mid+1,r)solve(l,mid1),solve(mid+1,r)
  2. 若距离为 d≠0d\ne0d=0,递归 solve(l,mid−d),solve(mid+d,r)solve(l,mid-d),solve(mid+d,r)solve(l,midd),solve(mid+d,r)

最后,我们需要确定步骤一中得到的位置 (p,p)(p,p)(p,p) 经过的是竖线还是横线,记录之前任何一次询问不在线上的点的坐标为 (no,no)(no,no)(no,no),分别询问 (no,p)(no,p)(no,p)(p,no)(p,no)(p,no) 即可.

Code\text{Code}Code

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define double long double 
#define ull unsigned long long
//#define debug(...) fprintf(stderr,__VA_ARGS__)
const int N=1e5+100;
const double eps=1e-12;
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,k;
int pl[N],tot;
int no;
int X[N],xx,Y[N],yy;
int o=1e8;
int debug(0);
void solve(int l,int r){if(debug)  printf("solve:(%d %d)\n",l,r);if(l>r) return;int mid=(l+r)/2;  printf("0 %d %d\n",mid,mid);fflush(stdout);int d=read();if(d==0){if(debug) printf("  ok\n");pl[++tot]=mid;solve(l,mid-1);solve(mid+1,r);}else{no=mid;if(debug) printf("  ??\n");solve(l,mid-d);solve(mid+d,r);}return;
}
signed main(){
#ifndef ONLINE_JUDGE//freopen("a.in","r",stdin);//freopen("a.out","w",stdout);
#endifsolve(-o,o);if(debug) printf("tot=%d no=%d\n",tot,no);for(int i=1;i<=tot;i++){int p=pl[i];printf("0 %d %d\n",no,p);fflush(stdout);if(!read()) Y[++yy]=p;    printf("0 %d %d\n",p,no);fflush(stdout);if(!read()) X[++xx]=p;}printf("1 %d %d\n",xx,yy);for(int i=1;i<=xx;i++) printf("%d ",X[i]);putchar('\n');for(int i=1;i<=yy;i++) printf("%d ",Y[i]);return 0;
}
/**/

CF788E New task

Description\text{Description}Description

有一个长度为 nnn 的数列 aia_iai,第 iii 个数有一个零一属性 bib_ibi,初始所有的 bbb 都为 111.
mmm 次操作,分为两种:

1x1 \space x1 x :令 bx=0b_x=0bx=0.
2x2 \space x2 x :令 bx=1b_x=1bx=1

每次操作后输出满足条件的 p1<p2<p3<p4<p5p_1<p_2<p_3<p_4<p_5p1<p2<p3<p4<p5,满足 ap1≤ap2=ap3=ap4≥ap5a_{p_1} \le a_{p_2} =a_{p_3}=a_{p_4} \ge a_{p_5}ap1ap2=ap3=ap4ap5bp2=bp3=bp4=1b_{p_2}=b_{p_3}=b_{p_4}=1bp2=bp3=bp4=1 的个数.
109+710^9+7109+7 取模的值.
(保证每次修改后的 bib_ibi 都与原来不同)

Solution\text{Solution}Solution

很适合练手的数据结构题.
一开始只想到树套树死卡空间然后被 @24KH 一语点破根本不用套.%%%
本题的关键就是动态统计加入一个点的贡献.
lil_ili 表示满足 j<i,aj≤aij<i,a_j\le a_ij<i,ajaijjj 的个数.
rir_iri 表示满足 j>i,aj≤aij>i,a_j\le a_ij>i,ajaijjj 的个数.
那么我们考虑加入一个点 ppp 时的贡献:

p 作为中间元素

增加的方案数为:

∑i<p<j∧ai=ap=ajli×rj\large \sum_{i<p<j \land a_i=a_p=a_j}l_i\times r_j i<p<jai=ap=ajli×rj
也就是:
∑i<p∧ai=apli×∑j>p∧aj=aprj\large \sum_{i<p \land a_i=a_p}l_i\times \sum_{j>p \land a_j=a_p}r_j i<pai=apli×j>paj=aprj

p 作为两端元素

由于对称,单举 ppp 在最左侧为例.
增加的方案数为:
∑p<i∧ai=aplp×ri×∑p<j<i[aj=ap]\large \sum_{p<i\land a_i=a_p}l_p\times r_i\times\sum_{p<j<i}[a_j=a_p] p<iai=aplp×ri×p<j<i[aj=ap]
换句话说就是 (p,i)(p,i)(p,i) 之间每有一个权值相等的点,(p,i)(p,i)(p,i) 作为相等的两端就能产生一次贡献.

统计

离散化后对每个权值建一棵线段树.
∑li/ri\sum l_i/r_ili/ri 统计较为简单.
比较困难的就是统计:
∑p<i∧ai=apri×∑p<j<i[aj=ap]\large \sum_{p<i\land a_i=a_p}r_i\times\sum_{p<j<i}[a_j=a_p] p<iai=apri×p<j<i[aj=ap]
这一项.
ransransrans 为这一项的答案,lanslanslans 为这一项对称的答案,同时记录数的个数 sizsizsiz∑li,∑ri\sum l_i,\sum r_ili,ri
合并左右儿子时:
sizls+sizrs→sizfasiz_{ls}+siz_{rs}\to siz_{fa}sizls+sizrssizfa
lsumls+lsumrs→lsumfalsum_{ls}+lsum_{rs}\to lsum_{fa}lsumls+lsumrslsumfa
rsumls+rsumrs→rsumfarsum_{ls}+rsum_{rs}\to rsum_{fa}rsumls+rsumrsrsumfa
lansls+lansrs+lsumls×sizrs→lansfalans_{ls}+lans_{rs}+lsum_{ls}\times siz_{rs}\to lans_{fa}lansls+lansrs+lsumls×sizrslansfa
ransls+ransrs+rsumrs×sizls→ransfarans_{ls}+rans_{rs}+rsum_{rs}\times siz_{ls}\to rans_{fa}ransls+ransrs+rsumrs×sizlsransfa
即可.

Code\text{Code}Code

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define double long double 
#define ull unsigned long long
#define debug(...) fprintf(stderr,__VA_ARGS__)
const int N=1e5+100;
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;
ll le[N],ri[N];
int id[N],bac[N];#define mid ((l+r)>>1)
struct node{ll siz;ll lsum,rsum;ll lans,rans;
};
node merge(node a,node b){return (node){a.siz+b.siz,(a.lsum+b.lsum)%mod,(a.rsum+b.rsum)%mod,(a.lans+b.lans+a.lsum*b.siz)%mod,(a.rans+b.rans+a.siz*b.rsum)%mod};
}
struct tree{node o;int ls,rs;
}tr[N<<5];
int rt[N],tot;
inline int copy(int x){++tot;tr[tot]=tr[x];return tot;
}
void add(int &k,int l,int r,int p,int w){if(!k) k=copy(k);if(l==r){tr[k].o.siz+=w;tr[k].o.lsum+=w*le[l];tr[k].o.rsum+=w*ri[l];return;}if(p<=mid) add(tr[k].ls,l,mid,p,w);else add(tr[k].rs,mid+1,r,p,w);tr[k].o=merge(tr[tr[k].ls].o,tr[tr[k].rs].o);//printf("  k=%d (%d %d) l")
}
//op=1:lsum
//op=2:lans
//op=3:rsum
//op=4:rans
node ask(int k,int l,int r,int x,int y){if(!k||x>y) return (node){0,0,0,0,0};if(x<=l&&r<=y) return tr[k].o;if(y<=mid) return ask(tr[k].ls,l,mid,x,y);else if(x>mid) return ask(tr[k].rs,mid+1,r,x,y);else return merge(ask(tr[k].ls,l,mid,x,y),ask(tr[k].rs,mid+1,r,x,y));
}int q[N],cnt,a[N];
int f[N];
inline void Add(int p){for(;p<=cnt;p+=p&-p) ++f[p];return;
}
inline int Ask(int p){int res(0);for(;p;p-=p&-p) res+=f[p];return res;
}inline ll calc(int pl){int o=rt[a[pl]];node L=ask(o,1,n,1,pl-1),R=ask(o,1,n,pl+1,n);return (L.lsum*R.rsum%mod+L.lans*ri[pl]%mod+R.rans*le[pl]%mod)%mod;
}
ll tt;
signed main(){
#ifndef ONLINE_JUDGEfreopen("a.in","r",stdin);freopen("a.out","w",stdout);
#endifn=read();for(int i=1;i<=n;i++) q[i]=a[i]=read();sort(q+1,q+1+n);cnt=unique(q+1,q+1+n)-q-1;for(int i=1;i<=n;i++) a[i]=lower_bound(q+1,q+1+cnt,a[i])-q;for(int i=1;i<=n;i++){le[i]=Ask(a[i]);Add(a[i]);}memset(f,0,sizeof(f));for(int i=n;i>=1;i--){ri[i]=Ask(a[i]);Add(a[i]);}for(int i=1;i<=n;i++) id[i]=++bac[a[i]];//for(int i=1;i<=n;i++) printf("i=%d a=%d le=%lld ri=%lld id=%d\n",i,a[i],le[i],ri[i],id[i]);for(int i=1;i<=n;i++){tt+=calc(i);tt%=mod;add(rt[a[i]],1,n,i,1);}m=read();for(int i=1;i<=m;i++){int op=read(),x=read();if(op==1){add(rt[a[x]],1,n,x,-1);tt-=calc(x);}else{tt+=calc(x);add(rt[a[x]],1,n,x,1);}tt+=mod;tt%=mod;printf("%lld\n",tt);}return 0;
}
/**/

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

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

相关文章

【HDU-2376】Average distance

【HDU-2376】Average distance 题意&#xff1a; 给你一个树&#xff0c;求树上任意两个点之间的距离的平均值 题解&#xff1a; 就是求出任意两点之间的距离和然后除以边数 ”任意两点之间的距离“ 和怎么算&#xff1f; 我们去考虑边的贡献情况&#xff1a; 对于边(u,v)&…

Ocelot 资源汇总

前言最近一两年.NET Core的关注度持续上升, 微服务及云原生应用开发上采用.NET Core也越来越多&#xff0c;Ocelot 作为.NET Core平台下一款开源的API 网关开发库越来越得到社区的认可&#xff0c;应用到生产中的案例也有好几百了。春节抽空整理了现有网上公开的Ocelot相关的资…

P6698-[BalticOI 2020 Day2]病毒【AC自动机,dp,SPFA】

正题 题目链接:https://www.luogu.com.cn/problem/P6698 题目大意 有一个包含0∼G−10\sim G-10∼G−1的字符集&#xff0c;其中有nnn种变换&#xff0c;能够将一个字符ai(ai>1)a_i(a_i>1)ai​(ai​>1)变为一串字符bib_ibi​&#xff0c;当一个字符串中只剩下000和1…

[TJOI2017]城市(未解决)

[TJOI2017]城市 题意&#xff1a; 一棵树&#xff0c;现在要求你将一条边改变他的位置&#xff0c;&#xff08;即改变左右所连接的端点&#xff0c;权值不变&#xff09;&#xff0c;修改后任意两点相互可达&#xff0c;且使得两个点之间的最大交通费用最小 题解: 有O(n^2…

数论三之组合数学Ⅰ-Max-Min Sums,Binomial Coefficient is Fun,Strivore,Bubble Sort,放棋子,LOJ6671,Iroha and a Grid

组合计数我最爱Max-Min SumsdescriptionsolutioncodeBinomial Coefficient is FundescriptionsolutioncodeStrivoredescriptionsolutioncodeBubble Sortdescriptionsolutioncode[HAOI2016]放棋子descriptionsolutioncodeEntropyIncreaser 与 MinecraftdescriptionsolutioncodeD…

12.15模拟:总结

前言 20分 《好耶》 很好的把所有错误都犯了一遍。 8&#xff1a;30写完AB题 11&#xff1a;00还是只写完AB题, T1代码没有提交 T2数组算错空间全RE T3快结束了发现CE了删掉第二档后还交成了之前写的失败版本(结果靠这破玩意水到了仅有的20分) T4考场其实猜到了结论但没证出来…

语言之争与读书有感

移动互联网无处不在的今天&#xff0c;不同的学习方式让我们受益颇多。有人喜欢通过手机阅读各类技术专家的公众号分享&#xff1b;有人喜欢通过逛逛不同的博客&#xff0c;来了解当前时下的技术&#xff1b;也有人喜欢通过社区的形式&#xff0c;跟优秀的导师们一起梳理和发展…

CF566E-Restoring Map【bitset】

正题 题目链接:https://www.luogu.com.cn/problem/CF566E 题目大意 有一棵树&#xff0c;但是你不知道它的形态。你现在只知道距离每个点距离不超过222的点集&#xff0c;但是你不知道每个点集是对应哪个点的。 现在要你求这棵树。 2≤n≤10002\leq n\leq 10002≤n≤1000 解…

所有人都可以是开发人员——《Office 365开发入门指南》视频教程即将上市

今天是春节假期的最后一天&#xff0c;在这里给全国的朋友们拜个晚年&#xff0c;祝大家身体健康&#xff0c;晚年幸福啊。这个春节大家过的怎么样啊&#xff0c;我自己是在老家过的年&#xff0c;家乡的年味还是比较浓的&#xff0c;也再次感谢朋友圈的大家给我看了各地的风光…

CodeForces: 360(div1)361(div2)

文章目录前言CF361A Levko and TableDescription\text{Description}DescriptionSolution\text{Solution}SolutionCode\text{Code}CodeCF361B Levko and PermutationDescription\text{Description}DescriptionSolution\text{Solution}SolutionCode\text{Code}CodeCF360A Levko a…

数论三之排列组合Ⅱ——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…