首页 > 其他分享 >11.10 模拟赛小记

11.10 模拟赛小记

时间:2023-11-10 20:01:50浏览次数:43  
标签:cnt idx int ll head long 11.10 模拟 小记

特附今日闲话

100+95+0+20.


A.数字操作(num)

赛时其实是看了一下样例和数据范围的一档说均为质数,无端的想到 gcd 于是就秒掉了。

其实因为这个减数、统计不重复的过程就类似于辗转相除吧。然后就没了。没什么说的,存一下码好了。

#include<bits/stdc++.h>
using namespace std;
int T,n;
int gcd(int x,int y){
	if(!y) return x;
	return gcd(y,x%y);
}
void solve(){
	scanf("%d",&n);
	int k=0,mx=0,ans=0;
	for(int i=1;i<=n;i++){
		int x;
		scanf("%d",&x);
		if(!k) k=x;
		else k=gcd(k,x);
		mx=max(mx,x);
	}
	for(int i=k;i<=mx;i+=k) ans++;
	printf("%d\n",ans);
}
int main(){
	freopen("num.in","r",stdin);
	freopen("num.out","w",stdout);
	scanf("%d",&T);
	while(T--) solve();
} 

B.最短路(path)

次短路统计的板子喔,大概就是分两维的 dij。在 9.26 的这一场比赛 里做过这道题所以切了。考场一直在担心 dij 能不能跑过去,后来才意识到本题常见做法只有 dij 了...

你问我为什挂了 5 分?因为没有判次短路是不是严格符合要求(比最短路小 1)。

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=2e6+10;
const ll mod=998244353;
int n,m;
ll cnt[N][2];
int vis[N][2],d[N][2];
int idx,e[N],nxt[N],head[N];
void add(int x,int y){
	e[++idx]=y;
	nxt[idx]=head[x];
	head[x]=idx;
}
void dij(){
	priority_queue<pair<pair<int,int>,int> > q;
	memset(d,0x3f,sizeof d);
	q.push(make_pair(make_pair(0,1),0));
	d[1][0]=0;
	cnt[1][0]=1;
	while(q.size()){
		int x=q.top().first.second,t=q.top().second;
		q.pop();
		if(vis[x][t]) continue;
		vis[x][t]=1;
		for(int i=head[x];i;i=nxt[i]){
			if(d[e[i]][0]>d[x][t]+1){
				d[e[i]][1]=d[e[i]][0],cnt[e[i]][1]=cnt[e[i]][0];
				q.push(make_pair(make_pair(-d[e[i]][1],e[i]),1));
				d[e[i]][0]=d[x][t]+1,cnt[e[i]][0]=cnt[x][t];
				q.push(make_pair(make_pair(-d[e[i]][0],e[i]),0));
			}
			else if(d[e[i]][0]==d[x][t]+1) cnt[e[i]][0]=(cnt[e[i]][0]+cnt[x][t])%mod;
			else if(d[e[i]][1]>d[x][t]+1){
				d[e[i]][1]=d[x][t]+1,cnt[e[i]][1]=cnt[x][t];
				q.push(make_pair(make_pair(-d[e[i]][1],e[i]),1));
			}
			else if(d[e[i]][1]==d[x][t]+1) cnt[e[i]][1]=(cnt[e[i]][1]+cnt[x][t])%mod;
		}
	}
}
int main(){
	scanf("%d%d",&n,&m);
	while(m--){
		int x,y;
		scanf("%d%d",&x,&y); 
		add(x,y);
		add(y,x);
	}
	dij();
	if(d[n][0]+1!=d[n][1]||!d[n][0]||d[n][0]==0x3f3f3f3f) puts("0");
	else printf("%lld\n",cnt[n][1]);
}

C.火花(fire)

正解还没补,大概是离线下来线段树 + 并查集。我觉得我赛前只需要尽力补一补暴力能力。

赛时,好像最后一个小时脑子都是糊涂的。想当然的写了个链的性质赛后就发现假了。20pts 的爆搜又不会写。

所以赶紧补了一下树上搜。现在会了。这是 20pts 的码。

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=3e5+110;
int n,q,k;
ll ans;
int vis[N];
int idx,e[N],w[N],nxt[N],head[N];
void add(int x,int y,int z){
	e[++idx]=y;
	w[idx]=z;
	nxt[idx]=head[x];
	head[x]=idx;
}
void dfs(int x){
	vis[x]=1;
	for(int i=head[x];i;i=nxt[i]){
		if(w[i]>k) continue;
		if(!vis[e[i]]){
			ans+=w[i];
			dfs(e[i]);
		}
	}
} 
int main(){
	scanf("%d",&n);
	for(int i=2;i<=n;i++){
		int x,z;
		scanf("%d%d",&x,&z);
		add(x,i,z);
	}
	scanf("%d",&q);
	while(q--){
		int u;
		scanf("%d%d",&u,&k);
		dfs(u);
		printf("%lld\n",ans);
		memset(vis,0,sizeof vis);
		ans=0;
	}
}

D.互斥(exc)

同上,感觉不需要补了,这是 30pts 的暴力。赛时为什么暴力还挂成 20pts 了呢,因为快速幂忘记开 long long 炸掉了。

#include<bits/stdc++.h>
#define ull unsigned long long
#define ll long long
using namespace std;
const int N=2e5+10;
const ll mod=998244353;
int n,a,b;
ll ans;
int t[N];
map<ull,int> vis;
bool check(int m){
	if(m==1) return 1;
	for(int i=1;i<=m;i++)
		for(int j=i+1;j<=m;j++)
			if(t[i]*a==t[j]||t[j]*a==t[i]||t[i]*b==t[j]||t[j]*b==t[i]) return 0;
	return 1;
}
void js(int m){
	ull tot=0;
	for(int i=1;i<=m;i++) tot=tot*131+t[i]*131;
	if(!vis[tot]){vis[tot]=1;ans++;}
}
void dfs(int x,int tot){
	if(check(tot)) js(tot);
	if(x==n+1) return;
	t[tot+1]=x;
	dfs(x+1,tot+1);
	t[tot+1]=0;
	dfs(x+1,tot);
}
ll ksm(ll a,ll b){
	ll tot=1;
	while(b){
		if(b&1) tot=(tot*a)%mod;
		b>>=1;
		a=(a*a)%mod;
	}
	return tot%mod;
}
int main(){
	scanf("%d%d%d",&n,&a,&b);
	if(a==1&&b==1){
		printf("%lld",ksm(2,n));
		return 0;
	}
	if(n<=15){
		dfs(1,0);
		printf("%lld",ans);
		return 0;
	}
}

标签:cnt,idx,int,ll,head,long,11.10,模拟,小记
From: https://www.cnblogs.com/Moyyer-suiy/p/17824910.html

相关文章

  • 11.10
    今天下雪了学习了Javaweb基础,增加操作,今天代码如下packagedao;importbean.Bean;importutils.DBUtils;importjava.sql.Connection;importjava.sql.PreparedStatement;importjava.sql.ResultSet;importjava.sql.SQLException;importjava.util.ArrayList;importjava.util......
  • nfls 11.10挂分日记
    今天老老实实写了对拍,但是还是挂分了。T1数论分块,学了一下双指针的写法,我那个写法又对于大肠选手直接T飞了。没注意到这个数据其实很大概率都是全部输出0,在没有精心构造的情况下几乎全都跑挂了。T2一个最短路的变形题目,每个行每个列跑一个最短路就好了,将关键点之间连边,然......
  • STL容器list的模拟实现
    前言list是C++STL的容器之一,相比string和vector,list在插入和删除数据时的效率更高。因为list的存储模型是一个个节点,新增数据并不需要将旧空间销毁,重新开辟新空间。但是list访问数据的速度较差,因为需要从某个节点开始不断迭代一、关于list1.list的大小用不同的类型分别对库中的list......
  • 11.10每日总结
    今天创建了vue项目,了解了vue项目的目录如下: vue的组件分为组合式api和选项式api ①创建了组件内容如下:<scriptsetup>import{articleGetAllService,articleSearchService}from'@/api/article.js'//定义响应式数据import{ref}from'vue';constarticleList=re......
  • 雷电模拟器改arm架构教程,具体如何实现出来?详细
    模拟器,比如雷电模拟器(LDPlayer),通常是在PC上模拟Android操作系统环境,使得用户可以在PC上运行Android应用。雷电模拟器本身就是设计来模拟ARM架构的,因为大部分Android应用都是为ARM架构编译的。然而,由于大多数PC使用的是x86架构的CPU,模拟器需要通过某种方式来翻译或模拟ARM指令集以......
  • 1PL模拟研究代码片段
    模拟研究模拟研究是教育测量研究中常见的组成部分,也是重要组成部分。其目的在于说明在模拟情况为真的情况下,模型的统计性能如何。我们可以根据我们的理论假设来设定或者调整数据生成的过程,由此探讨在不同条件下模型的统计性能如何。此外,模拟研究还有以下优势a)可以操纵多个条......
  • 11.10打卡
    1.加1(66)给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位,数组中每个元素只存储单个数字classSolution{publicint[]plusOne(int[]digits){for(inti=digits.length-1;i>=0;i--){d......
  • 每日总结11.10
    周报学习内容在本周,我专注于学习javaweb相关知识。我参考了多个教程和文档,通过编写简单的示例程序来加深理解。我学习了Servlet、JSP、JavaBean等基本概念,并了解了如何使用Tomcat作为服务器运行我的javaweb应用程序。工作进展在学习javaweb的过程中,我也进行了一些实践工作......
  • 「Log」2023.11.9 小记
    序幕\(\text{7:00}\):起晚了到校(不是为啥这个点还没人),整整博客。接着做点CF题,等会模拟赛。\(\text{7:30}\):准时开题。看来是JOI专场,题面还是有点意思的。(实际上是JOISC2015,赛后知道的。)T1感觉有点神秘先跳过。T2貌似除了最后一个字母都是固定的,而且\(k\)很小,直接维......
  • 模拟集成电路设计系列博客——3.4.2 稳压器反馈分析
    3.4.2稳压器反馈分析上一小节中介绍的稳压器的开环分析与基本源极跟随器很相似,假定使用一个跨导为\(G_{ma}\),输出阻抗为\(R_{oa}\)的单级放大器,环路在放大器的输入处断开并是呀一个测试信号\(v_{t}\),可以得到如下图所示的小信号等效电路。稳压器负载通过小信号电阻\(R_L\)建模,并......