首页 > 其他分享 >2024.10.7 模拟赛 多校3

2024.10.7 模拟赛 多校3

时间:2024-11-01 16:11:38浏览次数:3  
标签:2024.10 int LL d% 多校 long freopen 模拟 mod

模拟赛

水题场。

T1 colorful

签。

感觉题挺好,正难则反,找出四角都相同的。

在这两排有 6 个四角相同的矩形

对于两排来说,我们只需要记录相同的列的个数,然后能直接算出个数。

发现桶排每次清空复杂度太高,考虑每次只开一排的桶,只会有 \(n\) 个。

code
#include<bits/stdc++.h>
using namespace std;
#define LL long long
const int N = 405;
int n,m,tot,c[N][N],cnt[N];
unordered_map<int,int> mp;
LL sum,fac[N];
int main()
{
	freopen("colorful.in","r",stdin);
	freopen("colorful.out","w",stdout);
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) sum+=i*j;
	fac[0]=0; fac[1]=1;
	for(int i=2;i<=m;i++) fac[i]=fac[i-1]+i;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++)
			scanf("%d",&c[i][j]);
	for(int i=1;i<=n;i++)
	{
		tot=0; mp.clear();
		for(int j=1;j<=m;j++) {if(!mp[c[i][j]]) mp[c[i][j]]=++tot;}
		for(int k=i;k<=n;k++)
		{
			for(int j=1;j<=m;j++)
			{
				if(c[i][j]==c[k][j]) cnt[mp[c[i][j]]]++;
			}
			for(int j=1;j<=tot;j++) sum-=fac[cnt[j]],cnt[j]=0;
		}
	}
	printf("%lld\n",sum);
	return 0;
}

T2 travel

签没签。

区间修改,求和。

赛时糊了一个珂朵莉,但是没有颜色段均摊的珂朵莉是假的!

(想不到差分),区间修改直接想差分,最后遍历一遍统计和就行了。

有一点细节。

点code
#include<bits/stdc++.h> 
using namespace std;
#define LL long long 
#define P pair<int,int>
const int N = 2e6+5,mod = 1e9+7;
int n,m,S,T,tot;
P a[N];
LL ans=1;
inline LL qpow(LL a,int b)
{
	LL res=1;
	while(b)
	{
		if(b&1) res=res*a%mod;
		a=a*a%mod; b>>=1;
	}
	return res;
}
int main()
{
	freopen("travel.in","r",stdin);
	freopen("travel.out","w",stdout);
	scanf("%d%d%d%d",&n,&m,&S,&T);
	for(int i=1;i<=m;i++)
	{
		int c,x,y; scanf("%d%d%d",&c,&x,&y);
		a[++tot]={x,-1}; if(y<T) a[++tot]={y+1,1};
	}
	sort(a+1,a+1+tot); a[0].first=S; a[++tot].first=T+1;
	for(int i=0;i<tot;i++)
	{
		n+=a[i].second;
		if(a[i+1].first>a[i].first)
			ans=(ans*qpow(n,a[i+1].first-a[i].first))%mod;
	}
	printf("%lld\n",ans);
	return 0;
}

T3 线段树

签。

既然断点任选了,那和树也没关系了,就是区间问题,dp。

code
#include<bits/stdc++.h> 
using namespace std;
const int N = 505;
int n,q;
long long s[N][N],f[N][N];

int main()
{
	freopen("segment.in","r",stdin);
	freopen("segment.out","w",stdout);
	scanf("%d%d",&n,&q);
	memset(f,0x3f,sizeof(f));
	for(int i=1;i<=q;i++)
	{
		int x,y; scanf("%d%d",&x,&y);
		s[x][y]++;
	}
	for(int k=1;k<=n;k++)
		for(int i=n;i>=1;i--) s[k][i]+=s[k][i+1];
	for(int k=1;k<=n;k++)
		for(int i=1;i<=n;i++) s[i][k]+=s[i-1][k];
	for(int i=1;i<=n;i++) f[i][i]=s[i][i];
	for(int len=2;len<=n;len++)	
	{
		for(int l=1,r=len+l-1;r<=n;l++,r++)
		{
			for(int k=l;k<r;k++)
			{
				f[l][r]=min(f[l][r],f[l][k]+f[k+1][r]-s[l][r]);
			}
		}
	}
	printf("%lld\n",f[1][n]);
	return 0;
}

T4 薛定谔的猫和巴甫洛夫的狗

巴甫洛夫的狗

trick,统计方案数可以用这种情况出现的概率乘总方案数。

计算概率明显比方案要好求,而且发现是基环树。

找到 \(n\) 所在环编号最小的点作为开始点,然后 dp 向后推是否有猫的概率。

code
#include<bits/stdc++.h>
using namespace std;
const int N = 5e3+5,mod = 1e9+7;
#define LL long long
int T,n;
int fa[N],bl[N],tot,b[N];
char s[N];
inline int find(int x) {return x==fa[x]?(x):(fa[x]=find(fa[x]));}
unordered_map<int,int> mp;
LL inv,p[N],ans;
void init()
{
	mp.clear(); tot=0; ans=0;
	for(int i=1;i<=n;i++) fa[i]=i;
}
inline LL qpow(LL a,int b)
{
	LL res=1;
	while(b)
	{
		if(b&1) res=res*a%mod;
		a=a*a%mod; b>>=1;
	}
	return res;
}
int main()
{
	freopen("experiment.in","r",stdin);
	freopen("experiment.out","w",stdout);
	inv=qpow(2,mod-2);
	scanf("%d",&T);
	while(T--)
	{
		scanf("%d%s",&n,s+1); init();
		for(int i=1;i<=n;i++)
		{
			scanf("%d",&b[i]);
			int fx=find(b[i]); fa[find(i)]=fx;
		}
		for(int i=1;i<=n;i++) 
		{
			int fx=find(i); if(!mp[fx]) mp[fx]=++tot;
			bl[i]=mp[fx]; fa[i]=i;
		}
		int fl;
		for(int i=n;i>=1;i--)
		{
			if(bl[i]==bl[n])
			{
				if(find(i)==find(b[i])) fl=i;
				fa[find(i)]=find(b[i]);
			}
		}
		for(int l=0;l<2;l++)
			for(int r=0;r<2;r++)
			{
				for(int i=1;i<=n;i++)
				{
					if(s[i]=='?') p[i]=inv;
					else if(s[i]=='C') p[i]=1;
					else if(s[i]=='.') p[i]=0;
				}
				LL q=0;
				for(int i=1;i<=n;i++)
				{
					if(i==fl)
					{
						q=(l?(p[i]):(mod+1-p[i]))*(r?(p[b[i]]):(mod+1-p[b[i]]))%mod;
						p[i]=l; p[b[i]]=r;
					}
					LL x=p[i],y=p[b[i]];
					p[i]=x*y%mod;
					p[b[i]]=(y+x*(1+mod-y)%mod)%mod;
				}
				ans=(ans+p[n]*q%mod)%mod;	
			}
		int cnt=count(s+1,s+1+n,'?');
		ans=(ans*qpow(2,cnt)%mod);
		printf("%lld\n",ans);
	}
	return 0;
}

标签:2024.10,int,LL,d%,多校,long,freopen,模拟,mod
From: https://www.cnblogs.com/ppllxx-9G/p/18464844

相关文章

  • 2024-11-1校内模拟赛总结
    前言:从下了早读一直打到吃午饭,\(4h\)左右的时间,\(IOI\)赛制,\(6\)道\(ABC203\)、\(204\)的\(CDE\)题,\(318\)分。赛时:T1:水,直接模拟即可。\(100\)分。T2:中位数二分答案,有点难,但之前写过,也是直接拿下了啊。100分。T3:也是模拟,但是我开\(map\)存的是\(pair<int,int>......
  • 2024.10.31 文件管理方案
      2024.10.31文件管理方案   文件管理方案(注意:红色文字为应用程序软件的名称) 金山文档请在使用微信扫码登录的金山文档中新建或导入需要长时间大量编辑、长期记录或者分享给他人和他人一起查看/编辑的文档或表格。WPS文档表格打开文件密码和7-ZIP解压缩密码......
  • MindSponge分子动力学模拟——增强采样(2024.11)
    技术背景关于增强采样(EnhancedSampling)算法的具体原理,这里暂不做具体介绍,感兴趣的童鞋可以直接参考下这篇综述文章:Enhancedsamplinginmoleculardynamics。大致的作用就是,通过统计力学的方法,使得目标分子的CV(CollectiveVariables)具有一个尽可能大的采样子空间,并且可以将其还......
  • Kafka python模拟整理
    模拟需要用到kafka的包,需要pip安装,但注意pipinstallkafka不适用于python3.x的某个版本以上,均已经换成kafka-python推荐使用版本2.0.2,目前稳定pip没有的问题如果是windows环境,可通过直接去官网下载python版本,指定版本会顺带安装pip如果是linux环境,有节点是不带pip的,可使用yu......
  • 【C++】string 类模拟实现:深入探索字符串操作原理
     快来参与讨论......
  • 2024.10 做题笔记
    2024.10做题笔记10.2随机化和搜索题还是太神秘P9257[PA2022]Mędrcy将每条咒语代表的不知道它的两个人连边,如果存在一个人不知道任何咒语,即图是菊花图,则第一天他就会离开否则第二天相当于每个人知道了每个人都至少知道一条咒语,那么如果一个人发现自己知道的咒语中有人一......
  • 笔试真题——机器人拧魔方模拟
    说明:根据遗留的记忆写出来了此篇文章,可能与原文解释有部分出入,但总体思路一致。题目说明:YYYYRRRRWWWWOOOOGGGGBBBBUUL'第一行为输入为对应F,R,B,L,U,D面的元素颜色第二行输入为翻转的标识符标识符有:F、F'、R、R'、B、B'、L、L'、U、U'、D、D'。分别为对应明的顺时针......
  • “范式杯”2023牛客暑期多校训练营1
    现在真的啥也不会了。。。D Chocolate首先考虑极端情况,1$\times$1的网格的话,先手必输。考虑其他情况,如果只能一个一个吃的话,显然是和奇偶相关的。对于先手来说,偶数自己赢,奇数是自己输。那么在矩阵中,虽然有着限制,但通过推小的例子可以发现,两方还是可以控制吃的数量的。对于先手......
  • 2024.10.31 近期练习
    板刷ARC,再不刷就退役了。ARC185AmodMGame2猜结论题,两个人牌的总和是\(n\times(n+1)\)。若\(n\times(n+1)\bmodm=0\)或\(>n\)先手获胜。显然手牌还有大于\(1\)张的时候不可能失败。和取模\(m\)为\(0\)那么后手一定最后一张失败;若取模\(\len\)则后手一直......
  • 2024.10.31
    《代码大全2》是一本编程领域的经典之作,为开发者们提供了丰富且实用的指导。在阅读过程中,关于软件构建的前期准备给我留下了深刻印象。书中强调了需求分析的重要性,这就像是大厦的蓝图绘制。如果对需求理解不清晰或存在偏差,后续的代码编写可能会像没有方向的航行。例如,若开发一个......