T1 set

从\(0\)到\(n\)前缀余数有\(n+1\)个,但只有\(n\)种取值,找到一样的两个输出区间即可。

\(code:\)

T1

#include<bits/stdc++.h>
using namespace std; namespace IO{
inline int read(){
char ch=getchar(); int x=0,f=1;
while(ch<'0'||ch>'9'){ if(ch=='-') f=-1; ch=getchar(); }
while(ch>='0'&&ch<='9'){ x=(x<<1)+(x<<3)+(ch^48); ch=getchar(); }
return x*f;
}
inline void write(int x,char sp){
char ch[20]; int len=0;
if(x<0){ putchar('-'); x=~x+1; }
do{ ch[len++]=(1<<4)+(1<<5)+x%10; x/=10; }while(x);
for(int i=len-1;~i;--i) putchar(ch[i]); putchar(sp);
}
inline int max(int x,int y){ return x<y?y:x; }
inline int min(int x,int y){ return x<y?x:y; }
inline void swap(int& x,int& y){ x^=y^=x^=y; }
inline void ckmax(int& x,int y){ x=x<y?y:x; }
inline void ckmin(int& x,int y){ x=x<y?x:y; }
} using namespace IO; const int NN=1000010;
int n,a[NN],pre[NN],sum[NN]; signed main(){
freopen("a.in","r",stdin);
freopen("a.out","w",stdout);
n=read();
for(int i=1;i<=n;i++) pre[i]=-1;
for(int i=1;i<=n;i++)
a[i]=read()%n;
for(int i=1;i<=n;i++){
sum[i]=(sum[i-1]+a[i])%n;
if(pre[sum[i]]>=0){
write(i-pre[sum[i]],'\n');
for(int j=pre[sum[i]]+1;j<=i;j++)
write(j,' ');
return 0;
}
pre[sum[i]]=i;
}
puts("-1");
return 0;
}


T2 read

答案为\(max(0,maxa*2-n-1)\)。发现我们只关心大于一半的最大值。在生成\(a\)时记\(id\)和\(cnt\),\(cnt\)为零时将\(id\)赋为当前的\(a\),否则如果当前\(a\)与\(id\)相同则令\(cnt\)加一,反之减一。如果最大值大于一半,最终\(id\)肯定为最大值且\(cnt\)大于零。再扫一遍即可。

值域是\(1e9\),也可开\(1e5\)的桶,先将\(1e9\)分为\(1e4\)个\(1e5\),统计个数最多的区间,再在这个区间里单个统计最大值。(%%\(fengwu\)

\(code:\)

T2

#include<bits/stdc++.h>
using namespace std;
typedef long long LL; namespace IO{
inline int read(){
char ch=getchar(); int x=0,f=1;
while(ch<'0'||ch>'9'){ if(ch=='-') f=-1; ch=getchar(); }
while(ch>='0'&&ch<='9'){ x=(x<<1)+(x<<3)+(ch^48); ch=getchar(); }
return x*f;
}
inline void write(int x,char sp){
char ch[20]; int len=0;
if(x<0){ putchar('-'); x=~x+1; }
do{ ch[len++]=(1<<4)+(1<<5)+x%10; x/=10; }while(x);
for(int i=len-1;~i;--i) putchar(ch[i]); putchar(sp);
}
inline int max(int x,int y){ return x<y?y:x; }
inline int min(int x,int y){ return x<y?x:y; }
inline void swap(int& x,int& y){ x^=y^=x^=y; }
inline void ckmax(int& x,int y){ x=x<y?y:x; }
inline void ckmin(int& x,int y){ x=x<y?x:y; }
} using namespace IO; const int NN=1010;
int n,s,m,k,id,cnt,sum,x[NN],y[NN],z[NN],Cnt[NN];
LL last; signed main(){
freopen("b.in","r",stdin);
freopen("b.out","w",stdout);
m=read(); k=read(); s=(1<<k)-1;
for(int i=1;i<=m;i++) sum+=(Cnt[i]=read());
for(int i=1;i<=m;i++) x[i]=read();
for(int i=1;i<=m;i++) y[i]=read();
for(int i=1;i<=m;i++) z[i]=read();
for(int i=1;i<=m;i++){
last=x[i];
if(!cnt) id=last, ++cnt;
else if(id!=last) --cnt;
else ++cnt;
for(int j=1;j<Cnt[i];j++){
last=(last*y[i]+z[i])&s;
if(!cnt) id=last, ++cnt;
else if(id!=last) --cnt;
else ++cnt;
}
}
if(cnt<=0){ puts("0"); return 0; }
cnt=0;
for(int i=1;i<=m;i++){
last=x[i];
if(last==id) ++cnt;
for(int j=1;j<Cnt[i];j++){
last=(last*y[i]+z[i])&s;
if(last==id) ++cnt;
}
}
write(max(cnt*2-sum-1,0),'\n');
return 0;
}


T3 题目交流通道

\(d\)不为零时可跑\(floyd\)。如果有\(k\)满足\(d_{u,v}=d_{u,k}+d_{k,v}\),则\(u,v\)之间的边取值随意,只要不小于\(d_{u,v}\)即可。

考虑\(d\)为零时,

\(code:\)

T3

#include<bits/stdc++.h>
#define int long long
using namespace std; namespace IO{
inline int read(){
char ch=getchar(); int x=0,f=1;
while(ch<'0'||ch>'9'){ if(ch=='-') f=-1; ch=getchar(); }
while(ch>='0'&&ch<='9'){ x=(x<<1)+(x<<3)+(ch^48); ch=getchar(); }
return x*f;
}
inline void write(int x,char sp){
char ch[20]; int len=0;
if(x<0){ putchar('-'); x=~x+1; }
do{ ch[len++]=(1<<4)+(1<<5)+x%10; x/=10; }while(x);
for(int i=len-1;~i;--i) putchar(ch[i]); putchar(sp);
}
inline int max(int x,int y){ return x<y?y:x; }
inline int min(int x,int y){ return x<y?x:y; }
inline void swap(int& x,int& y){ x^=y^=x^=y; }
inline void ckmax(int& x,int y){ x=x<y?y:x; }
inline void ckmin(int& x,int y){ x=x<y?x:y; }
} using namespace IO; const int NN=410,p=998244353;
int n,k,ans,g[NN],f[NN],d[NN][NN],dis[NN][NN];
bool nul[NN][NN],vis[NN][NN]; namespace combination{
int fac[NN],inv[NN];
inline int C(int n,int m){ return n<m?0:fac[n]*inv[m]%p*inv[n-m]%p; }
int qpow(int a,int b){
int res=1;
while(b){
if(b&1) res=res*a%p;
a=a*a%p;
b>>=1;
}
return res;
}
void init(){
fac[0]=inv[0]=f[1]=1;
for(int i=1;i<=n;i++) fac[i]=fac[i-1]*i%p;
inv[n]=qpow(fac[n],p-2);
for(int i=n-1;i;i--) inv[i]=inv[i+1]*(i+1)%p;
for(int i=1;i<=n;i++)
g[i]=qpow(k+1,C(i,2));
int sum=0;
for(int i=2;i<=n;i++){
f[i]=g[i];
for(int j=1;j<i;j++)
f[i]=(p+f[i]-f[j]*g[i-j]%p*C(i-1,j-1)%p*qpow(k,j*(i-j))%p)%p;
}
}
} using namespace combination; namespace DSU{
int fa[NN],siz[NN];
int getf(int x){
return fa[x]==x?x:fa[x]=getf(fa[x]);
}
void prework(){
for(int i=1;i<=n;i++)
fa[i]=i, siz[i]=1;
}
void merge(int x,int y){
x=getf(x); y=getf(y);
if(x==y) return;
siz[x]+=siz[y];
fa[y]=x;
}
} using namespace DSU; namespace work{
void judge(){
for(int i=1;i<=n;i++){
if(d[i][i])
puts("0"),exit(0);
for(int j=1;j<=n;j++)
if(d[i][j]!=d[j][i]||d[i][j]>k)
puts("0"),exit(0);
}
for(int k=1;k<=n;k++)
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(d[i][j]>d[i][k]+d[k][j])
puts("0"),exit(0);
}
int getans(){
int res=1,tmp=1;
for(int i=1;i<=n;i++) if(getf(i)==i)
res=res*f[siz[i]];
for(int i=1;i<=n;i++) if(getf(i)==i)
for(int j=i+1;j<=n;j++) if(getf(j)==j)
if(nul[i][j]) tmp=tmp*qpow(k-d[i][j]+1,siz[i]*siz[j])%p;
else tmp=tmp*(p+qpow(k-d[i][j]+1,siz[i]*siz[j])-qpow(k-d[i][j],siz[i]*siz[j]))%p;
return res*tmp%p;
}
} using namespace work; signed main(){
freopen("c.in","r",stdin);
freopen("c.out","w",stdout);
n=read(); k=read(); ans=1;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
d[i][j]=read();
init(); prework(); judge();
for(int i=1;i<n;i++)
for(int j=i+1;j<=n;j++)
if(!d[i][j]) merge(i,j);
for(int fk,k=1;k<=n;k++){
fk=getf(k);
for(int fi,i=1;i<=n;i++){
fi=getf(i);
for(int fj,j=1;j<=n;j++){
fj=getf(j);
if(fi==fj||fj==fk||fi==fk) continue;
if(d[i][j]==d[i][k]+d[k][j]) nul[fi][fj]=1;
}
}
}
write(getans(),'\n');
return 0;
}


2021.9.26考试总结[NOIP模拟62]的更多相关文章

  1. 2021.9.17考试总结[NOIP模拟55]

    有的考试表面上自称NOIP模拟,背地里却是绍兴一中NOI模拟 吓得我直接文件打错 T1 Skip 设状态$f_i$为最后一次选$i$在$i$时的最优解.有$f_i=max_{j<i}[f_j+a ...

  2. 2021.7.28考试总结[NOIP模拟26]

    罕见的又改完了. T1 神炎皇 吸取昨天三个出规律的教训,开场打完T2 20pts直接大力打表1h. 但怎么说呢,我不懂欧拉函数.(其实exgcd都忘了 于是只看出最大平方因子,不得不线性筛,爆拿60 ...

  3. 2021.9.13考试总结[NOIP模拟52]

    T1 路径 考虑每一位的贡献,第$i$位每$2^i$个数会变一次,那么答案为$\sum_{i=1}^{log_2n} \frac{n}{2^i}$. $code:$ 1 #include<bit ...

  4. 2021.8.11考试总结[NOIP模拟36]

    T1 Dove玩扑克 考场并查集加树状数组加桶期望$65pts$实际$80pts$,考后多开个数组记哪些数出现过,只扫出现过的数就切了.用$set$维护可以把被删没的数去掉,更快. $code:$ 1 ...

  5. 2021.7.29考试总结[NOIP模拟27]

    T1 牛半仙的妹子图 做法挺多的,可以最小生成树或者最短路,复杂度O(cq),c是颜色数. 我考场上想到了原来做过的一道题影子,就用了并查集,把边权排序后一个个插入,记录权值的前缀和,复杂度mlogm ...

  6. 2021.7.15考试总结[NOIP模拟16]

    ZJ模拟D2就是NB.. T1 Star Way To Heaven 谁能想到这竟是个最小生成树呢?(T1挂分100的高人JYF就在我身边 把上边界和下边界看成一个点和星星跑最小生成树,从上边界开始跑 ...

  7. 2021.9.14考试总结[NOIP模拟53]

    T1 ZYB和售货机 容易发现把每个物品都买成$1$是没有影响的. 然后考虑最后一个物品的方案,如果从$f_i$向$i$连边,发现每个点有一个出度多个入度,可以先默认每个物品都能买且最大获利,这样可以 ...

  8. 2021.9.12考试总结[NOIP模拟51]

    T1 茅山道术 仔细观察发现对于每个点只考虑它前面第一个与它颜色相同的点即可. 又仔细观察发现对一段区间染色后以这个区间内点为端点的区间不能染色. 于是对区间右端点而言,区间染色的贡献为遍历到区间左端 ...

  9. 2021.9.9考试总结[NOIP模拟50]

    T1 第零题 神秘结论:从一个点满体力到另一个点的复活次数与倒过来相同. 于是预处理出每个点向上走第$2^i$个死亡点的位置,具体实现可以倍增或二分. 每次询问先从两个点同时向上倍增,都转到离$LCA ...

随机推荐

  1. MySQL-技术专题-MySQL主从架构以及[半同步机制]模式大全

    MySQL的主从复制 一般在大规模的项目上,都是使用MySQL的复制功能来创建MySQL的主从集群的. 主要是可以通过为数据库服务器配置一个或多个备库的方式来进行数据同步. 复制的功能不仅有利于构建高 ...

  2. 【C++基础教程】第五课

    上次的作业答案,非常简单. 第一题: 我们需要知道,字符(char类型)在计算机中存储的时候,是把这个字符对应的代码(专业术语叫做编码)进行存储.例如,换行符'\n'的代码就是10,'0'对应的代码就 ...

  3. TP5用join进行查询出来后的循环id都是一样的

    这是因为join将两个表的所有字段都查询,id冲突了,所以需要设置名,或指定选择一个表的id 用field('a.*')

  4. Docker系列(1) - Centos8.X安装Docker

    环境准备 需要会Linux的基础 Centos8.x 使用Xshell连接远程服务器 环境查看 #系统内核是4.18以上 [root@localhost ~]# uname -r 4.18.0-305 ...

  5. 为什么Charles中的中文展示成数字、英文字符串

    在使用charles抓包时,可能非看到如下图的字符串: 为什么会出现这样的字符串? 我们看到的汉字.字母,对电脑来说并不长这样,而是用二进制表示的(显然--),为了统一标准,老外发明了"字符 ...

  6. ActiveQq的代码实现

    ]从java代码开始再过渡到springboot Java代码的实现 1.activemq这个消息中间件有两种形式 1. p2p(生产者,消费者) 特点: 生产者: package com.lqh; ...

  7. centos虚拟机中挂新硬盘

    配置一台centos7,主硬盘20G装系统:副硬盘20G作为数据盘(格式:XFS)挂载到根目录:/vdir/ ,XFS是高性能文件系统. 外层vm硬盘添加好后,执行下面 1.fdisk -l //查看 ...

  8. Unity——AssetBundle打包工具

    Unity批量打AB包 为了资源热更新,Unity支持将所有资源打包成AssetBundle资源,存放在SteamingAssets文件夹中: 在项目发布之前,需要将所有资源打包成.ab文件,动态加载 ...

  9. 初步认识HCIA,什么是计算机网络,拓扑,网络的发展,交换机,路由器,IP,光纤,带宽,广播,ARP......

    HCIA ---- 华为认证初级网络工程师 云技术 --- 云存储 云计算 计算机技术 : ​ --- 抽象语言 -- 电线号的转换 抽象语言 -- 编码 ---- 应用层 编码 --- 二进制 -- ...

  10. FastAPI 学习之路(十六)Form表单

    系列文章: FastAPI 学习之路(一)fastapi--高性能web开发框架 FastAPI 学习之路(二) FastAPI 学习之路(三) FastAPI 学习之路(四) FastAPI 学习之 ...