首页 > 其他分享 >CSP模拟7

CSP模拟7

时间:2024-10-09 18:59:52浏览次数:1  
标签:ch const int while return CSP 模拟 getchar

欠的太多了,就少说点吧

T1.median

把数组 \(a,b,c,d,e\) 存到一起,标记类型,然后排序,枚举每个数为中位数,算贡献即可。

点击查看代码
#include<bits/stdc++.h>
using namespace std;

#define int long long
const int N=1e5+107;
const int mod=998244353;
int n;

struct lmy
{
	int val,op;
	int s[6];
	int h[6];
}a[N*5];

bool comp(lmy a,lmy b)
{
	return a.val<b.val;
}

int read()
{
	int f=1,s=0;char ch=getchar();
	while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
	while(ch>='0'&&ch<='9'){s=(s<<1)+(s<<3)+(ch^48);ch=getchar();}
	return f*s;
}

int get(int i)
{
	
	int x=a[i].op;
//	cout<<x<<endl;
	int s1=a[i].s[1],s2=a[i].s[2],s3=a[i].s[3],s4=a[i].s[4],s5=a[i].s[5];
	int h1=a[i].h[1],h2=a[i].h[2],h3=a[i].h[3],h4=a[i].h[4],h5=a[i].h[5];
	
	int ans1=(x!=1?0:s2*s3%mod*h4%mod*h5%mod+
						   s2*s4%mod*h3%mod*h5%mod+
						   s2*s5%mod*h3%mod*h4%mod+
						   s3*s4%mod*h2%mod*h5%mod+
						   s3*s5%mod*h2%mod*h4%mod+
						   s4*s5%mod*h2%mod*h3%mod);
						   
	int ans2=(x!=2?0:s1*s3%mod*h4%mod*h5%mod+
						   s1*s4%mod*h3%mod*h5%mod+
						   s1*s5%mod*h3%mod*h4%mod+
						   s3*s4%mod*h1%mod*h5%mod+
						   s3*s5%mod*h1%mod*h4%mod+
						   s4*s5%mod*h1%mod*h3%mod);
						   
	int ans3=(x!=3?0:s2*s1%mod*h4%mod*h5%mod+
						   s2*s4%mod*h1%mod*h5%mod+
						   s2*s5%mod*h1%mod*h4%mod+
						   s1*s4%mod*h2%mod*h5%mod+
						   s1*s5%mod*h2%mod*h4%mod+
						   s4*s5%mod*h2%mod*h1%mod);
//	if(a[3].op==x) cout<<s1<<" "<<s2<<" "<<s3<<" "<<s4<<" "<<s5<<endl;					   
	int ans4=(x!=4?0:s2*s3%mod*h1%mod*h5%mod+
						   s2*s1%mod*h3%mod*h5%mod+
						   s2*s5%mod*h3%mod*h1%mod+
						   s3*s1%mod*h2%mod*h5%mod+
						   s3*s5%mod*h2%mod*h1%mod+
						   s1*s5%mod*h2%mod*h3%mod);
						   
	int ans5=(x!=5?0:s2*s3%mod*h4%mod*h1%mod+
						   s2*s4%mod*h3%mod*h1%mod+
						   s2*s1%mod*h3%mod*h4%mod+
						   s3*s4%mod*h2%mod*h1%mod+
						   s3*s1%mod*h2%mod*h4%mod+
						   s4*s1%mod*h2%mod*h3%mod);
	
	return ans1+ans2+ans3+ans4+ans5;
}

signed main()
{
	freopen("median.in","r",stdin);
	freopen("median.out","w",stdout);
	n=read();
	for(int i=1;i<=5;i++)
	{
		for(int j=1;j<=n;j++)
		{
			a[(i-1)*n+j]={read(),i};
		}
	}
	sort(a+1,a+1+n*5,comp);
	
	for(int i=1;i<=n*5;i++)
	{
		for(int j=1;j<=5;j++)
		{
			a[i].s[j]=a[i-1].s[j]+(a[i].op==j);
		}
	}
	
	for(int i=n*5;i>=1;i--)
	{
		for(int j=1;j<=5;j++)
		{
			a[i].h[j]=a[i+1].h[j]+(a[i].op==j);
		}
	}
	
//	for(int i=1;i<=n*5;i++)
//	{
//		cout<<a[i].op<<" ";
//	}cout<<endl;
//	for(int i=1;i<=n*5;i++)
//	{
//		cout<<a[i].val<<" ";
//	}cout<<endl;
	
//	for(int i=1;i<=n*5;i++)
//	{
//		cout<<"------------------\n";
//		cout<<i<<" "<<a[i].val<<" "<<a[i].op<<endl;
//		for(int j=1;j<=5;j++)
//		{
//			cout<<a[i].s[j]<<" ";
//		}cout<<endl;
//		for(int j=1;j<=5;j++)
//		{
//			cout<<a[i].h[j]<<" ";
//		}cout<<endl;
//		cout<<a[i].val*get(i)<<endl;
//	}
	
	int ans=0;
	for(int i=1;i<=n*5;i++)
	{
		
		ans=(ans+a[i].val*get(i)%mod)%mod;
	}
	printf("%lld",ans);
}

T2.travel

题目看着挺难受,但要求的比较简单,我们只需要判一下环,然后看是否有两个自环相联通,直接 \(dfs\) 一遍即可。

点击查看代码
#include<bits/stdc++.h>
using namespace std;

const int N=1e6+107;
int n,m;
int du[N];

int read()
{
	int f=1,s=0;char ch=getchar();
	while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
	while(ch>='0'&&ch<='9'){s=(s<<1)+(s<<3)+(ch^48);ch=getchar();}
	return f*s;
}

int h[N],to[N],nxt[N],tot;
void add(int x,int y)
{
	to[++tot]=y;
	nxt[tot]=h[x];
	h[x]=tot;
}

int dep[N],vis[N],flag[N];
int dfs(int u,int fa)
{
	dep[u]=1;
	int ans=vis[u];
	for(int i=h[u];i;i=nxt[i])
	{
		int v=to[i];
		if(dep[v]) return 2;
		ans+=dfs(v,u);
	}
	dep[u]=0;
	return ans;
}

int main()
{
	freopen("travel.in","r",stdin);
	freopen("travel.out","w",stdout);
	n=read(),m=read();
	for(int i=1;i<=m;i++)
	{
		int u=read(),v=read();
		
		if(u==v) vis[u]++;
		else add(u,v);
		if(vis[u]>=2) return printf("Yes\n"),0;
	}
	
	for(int i=1;i<=n;i++)
	{
		if(dfs(i,i)>=2) return printf("Yes\n"),0;
	}
	printf("No\n");
	
	return 0;
}

T3.game

博弈论,结论是,如果是偶数并且两两相互配对则必胜,否则必败。

点击查看代码
#include<bits/stdc++.h>
using namespace std;

const int N=5e5+107;
int n,a[N];

int read()
{
	int f=1,s=0;char ch=getchar();
	while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
	while(ch>='0'&&ch<='9'){s=(s<<1)+(s<<3)+(ch^48);ch=getchar();}
	return f*s;
}


int main()
{
	freopen("game.in","r",stdin);
	freopen("game.out","w",stdout);
	int T=read();
	while(T--)
	{
		int flag=0;
		n=read();
		for(int i=1;i<=n;i++) a[i]=read();
		sort(a+1,a+1+n);
		for(int i=1;i<=n;i+=2)
		{
			if(a[i]!=a[i+1]) 
			{
				flag=1;
				break;
			}
		}
		if(!(n&1)&&!flag) printf("No\n");
		else printf("Yes\n");
	}
	
}

标签:ch,const,int,while,return,CSP,模拟,getchar
From: https://www.cnblogs.com/zhengchenxi/p/18454933

相关文章

  • 人生模拟器免广告获取奖励 足够货币反加
    人生模拟器是一款可以让你体验不同生活方式的游戏,你可以选择成为学霸、股坛奇才,或是过上平淡生活的普通人。游戏中,你还可以投资餐饮公司、游戏公司,甚至参与竞选美国总统,探索和殖民火星。如果你正在寻找免广告获取奖励的方法,可以尝试下载人生模拟器免广告版,这样你就可以在没有......
  • 多校A层冲刺NOIP2024模拟赛04
    多校A层冲刺NOIP2024模拟赛04学校OJ赛时rank28,T10pts,T2100pts,T320pts,T425ptsaccodersrank15,T1100pts,T2100pts,T320pts,T425pts不是,也没人告诉我两个OJ文件名不一样啊02表示法递归+高精除低精。点此查看代码#include<bits/stdc++.h>#include<bits/extc++.h>//......
  • 『模拟赛』多校A层冲刺NOIP2024模拟赛04
    Rank赤石场。A.02表示法签。若干天前在洛谷随到过,不过当时只看了眼讨论区就走了www还好本来不是很难。发现大体上是一个拆分二的幂的问题,从大到小枚举2的幂,判断有没有这个幂只用比较大小关系,然后再对指数做一个同样的操作,递归至不大于2为止,注意\(2^1\)不用输出(1......
  • 人生模拟器免广告获取奖励 足够货币反加
    人生模拟器是一款可以让你体验不同生活方式的游戏,你可以选择成为学霸、股坛奇才,或是过上平淡生活的普通人。游戏中,你还可以投资餐饮公司、游戏公司,甚至参与竞选美国总统,探索和殖民火星。如果你正在寻找免广告获取奖励的方法,可以尝试下载人生模拟器免广告版,这样你就可以在没有......
  • 信息学奥赛复赛复习15-CSP-J2022-01乘方-数据类型、类型转换、数据类型溢出、指数、模
    PDF文档公众号回复关键字:202410091P8813[CSP-J2022]乘方[题目描述]小文同学刚刚接触了信息学竞赛,有一天她遇到了这样一个题:给定正整数a和b,求a^b的值是多少。a^b即b个a相乘的值,例如2^3即为3个2相乘,结果为2×2×2=8“简单!”小文心想,同时很快就写出了......
  • 10.9(NOIP 模拟赛 #10)
    2025--炼石计划--10月06日--NOIP模拟赛#10【订正】-比赛-梦熊联盟(mna.wang)复盘T1计数题,感觉不难。用样例模拟了一下,找到一个较优的去重方式。然后过了样例。此时8:10。T2好像又是矩阵加速。想正解。想不出来,只能做到\(\mathcalO(n^6\logk)\)的复杂度。......
  • 多校A层冲刺NOIP2024模拟赛04
    多校A层冲刺NOIP2024模拟赛04\(T1\)A.02表示法\(0pts/100pts\)弱化版:luoguP1010[NOIP1998普及组]幂次方递归模拟即可,二进制分解时需要写高精除低精。点击查看代码intr[810],t[810];chars[810],id[810][10];stringa;intchu(chars[]){ intn=strlen(s......
  • 「闲话」CSP 集训记梦
    一个不写闲话的oier不能证明他是一个oier其实写这个是因为10.5晚上做梦了,所以记录一下建议跳过9.28和10.1部分9.28上午模拟赛。T1一开始搞了个贪心假做法,发现过了大样例,但显然不对吧!也不会其他的解法,先交了一发。然后开始写暴力拍了一手,两千组拍出了个Wa的,手......
  • fiddler抓模拟器的手机包
    1、fiddler中设置a、设置抓取https接口 b.设置端口和允许所有设备连接 下载  2、下载模拟器并打开模拟器 3、开始模拟器是平板模式,改成手机竖屏模式改成900*1600 4、在window中的运行中输入:inetcpl.cpl b、点击连接输入代理地址:127.0.0.1 端口号:8888 ......
  • HarmonyOS NEXT模拟登录页,华为账号一键登录
    一、介绍基于鸿蒙Next模拟账号一键登录,免去账号注册环节二、场景需求1. 用户场景新用户: 需要快速注册并登录,以体验华为的服务。老用户: 希望快速登录,不用每次输入用户名和密码。2. 界面设计Logo和标题: 页面顶部展示华为的Logo及"一键登录"或"华为账号登录"的标题。3.......