首页 > 其他分享 >CSP-J2022山东补赛题解

CSP-J2022山东补赛题解

时间:2023-05-19 21:05:30浏览次数:43  
标签:int 题解 ll cin long 补赛 1e9 CSP MOD

1.植树节

原题:https://www.luogu.com.cn/problem/U285015

代码:

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N = 1e6+255;
int a[N],n,x,y,maxb=-1e9,ans=-1e9;
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>x>>y;
		a[x]++;a[y+1]--;
		maxb=max(maxb,y);
	}
	for(int i=0;i<=maxb;i++)a[i]+=a[i-1];
	for(int i=0;i<=maxb;i++)ans=max(ans,a[i]);
	cout<<ans;
	return 0;
}

  

解题思路:

差分模板,计算出最大的b,求差分数组,取最大值即可

 

2.宴会

原题:https://www.luogu.com.cn/problem/U285016

代码:

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N = 1e5+255;
int T,n,x[N],t[N],minn=1e9,maxn=-1e9;
int main(){
	cin>>T;
	while(T--){
		maxn=-1e9;minn=1e9;
		cin>>n;
		for(int i=1;i<=n;i++)cin>>x[i];
		for(int i=1;i<=n;i++)cin>>t[i],maxn=max(maxn,x[i]+t[i]),minn=min(minn,x[i]-t[i]);
		cout<<(minn+maxn)/2.0<<'\n';
	}
	return 0;
}

  

解题思路:

枚举每个人向左走的最小值,向右走的最大值,求平均数就是答案

 

3.部署

原题:https://www.luogu.com.cn/problem/U285018

代码:

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N = 1e6+255;
int n,m,q,x,y,a[N],b[N],c[N],head[N],cnt=-1;
struct edg{
	int to,next;
}e[4*N];
void add(int x,int y){
	e[++cnt]=(edg){y,head[x]};
	head[x]=cnt;
}
void dfs(int x,int y){
	a[x]+=b[x];
	a[y]+=c[x];
	a[x]+=c[x];
	for(int i=head[x];~i;i=e[i].next){
		int v=e[i].to;
		if(v==y)continue;
		a[v]+=c[x];
		b[v]+=b[x];
		dfs(v,x);
	}
}
int main(){
	memset(head,-1,sizeof(head));
	cin>>n;
	for(int i=1;i<=n;i++)cin>>a[i];
	for(int i=1;i<n;i++){
		cin>>x>>y;
		add(x,y);
		add(y,x);
	}
	cin>>m;
	for(int i=1,p;i<=m;i++){
		cin>>p>>x>>y;
		if(p==1)b[x]+=y;
		else c[x]+=y;
	}
	dfs(1,0);
	cin>>q;
	while(q--){
		cin>>x;
		cout<<a[x]<<'\n';
	}
	return 0;
}

  

解题思路:

进行预处理,统计两种操作的值,用一个深搜,输出答案就行了

 

4.吟诗

原题:https://www.luogu.com.cn/problem/U285023

代码:

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int MOD = 998244353,N = 75;
ll move(ll a,ll b){return ((a%MOD)*(b%MOD))%MOD;}
ll add(ll a,ll b){return ((a%MOD)+(b%MOD))%MOD;}
ll n,x,y,z,d,sum,ans=1,f[N][1<<18];
int main(){
	cin>>n>>x>>y>>z;
	d=(1<<x+y+z-1);
	d|=(1<<y+z-1);
	d|=(1<<z-1);
	sum=(1<<x+y+z)-1;
	f[0][0]=1;
	for(int i=1;i<=n;i++){
		ans=move(ans,10);
		for(int j=0;j<sum;j++){
			if(!f[i-1][j])continue;
			for(int k=1;k<=10;k++){
				ll num=(j<<k)|(1<<k-1);
				num&=sum;
				if((num&d)!=d)f[i][num]=add(f[i][num],f[i-1][j]);
			}
		}
	}
	for(int i=0;i<sum;i++)ans=add(ans,MOD-f[n][i]);
	cout<<ans;
	return 0;
}

  

解题思路:

这道题用暴力可以拿到30分,但正解是状态压缩,将x,y,z的前缀和组成一个数d,再求出方案数sum,进行dp,最后累加结果就是答案

标签:int,题解,ll,cin,long,补赛,1e9,CSP,MOD
From: https://www.cnblogs.com/zhanghx-blogs/p/17416244.html

相关文章

  • CSP-J2019试题题解
    1.数字游戏原题:https://www.luogu.com.cn/problem/P5660代码:#include<bits/stdc++.h>#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>usingnamespacestd;strings;intmain(){ cin>>s;intnum=0; fo......
  • Luogu P5664 [CSP-S2019] Emiya 家今天的饭
    发现“每种主要食材至多在\(\lfloor\frac{k}{2}\rfloor\)个菜中被使用”有一个性质,在不合法的情况下绝对只有\(1\)个主要食材的个数\(>\lfloor\frac{k}{2}\rfloor\),因为\(k-\lfloor\frac{k}{2}\rfloor-1\le\lfloor\frac{k}{2}\rfloor\)然后就能发现算不合法......
  • CF1512C A-B Palindrome 题解
    CF1512CA-BPalindrome题解Link洛谷CodeforcesDescription给出\(T\)个只由0、1和?组成的字符串\(s\),将字符串中的?替换成0或1之后形成一个回文串并且恰好有\(a\)个0和\(b\)个1,无解输出-1。Solution首先,若不考虑?原串不为回文串一定无解,输出-1即......
  • CF1512D Corrupted Array 题解
    CF1512DCorruptedArray题解Link洛谷CodeforcesDescription给定一个正整数\(n\)和长度为\(n+2\)的数组\(b\),数组\(b\)是依据如下算法构造的:随机生成一个含有\(n\)个元素的原始数组\(a\);把数组\(a\)赋值给数组\(b\),即\(b_i=a_i(1\lei\len)\);数组\(b\)......
  • 【题解】第五届图灵杯
    //createdon23.05.13目录A.差值B.基础循环结构练习题C.基础计算几何练习题D.永恒悲剧A.差值考虑求长度为\(i\)的答案,肯定是长度\(\geqi\)的后缀,按照字典序排序后,相邻两个求解。所以考虑倒着扫,每次对于\(i\)的后缀找到排名前后第一个后缀,求出两个长度为\(i\)......
  • CSP-J2020试题
    1.优秀的拆分原题:https://www.luogu.com.cn/problem/P7071代码:#include<bits/stdc++.h>#definelllonglongusingnamespacestd;constintN=1e4+255;lln,x=0,power[N];intmain(){ cin>>n; if(n%2==1)cout<<"-1"; else{ while(n){ ......
  • GYM104363 2023 ccpc 黑龙江省赛 题解
    比赛链接:https://codeforces.com/gym/104363题解:B//bySkyRainWind#include<bits/stdc++.h>#definemprmake_pair#definedebug()cerr<<"Yoshino\n"#definepiipair<int,int>#definepbpush_backusingnamespacestd;typedeflong......
  • ASC8题解
    B:考虑用\(D(n,r)\)表示在\(r\)维空间中有\(n\)个超平面最多形成多少个区域,感觉不是很好做,考虑一下怎么递推。根据在二三维的经验,我们可以得到以下递推式:\(D(n,r)=D(n-1,r)+D(n-1,r-1)\),实际意义就是原来已经有了\(n-1\)个然后再加入一个之后,会与前面的\(n-1\)个超平面在\(r\)维......
  • Html中使用jquery通过Ajax请求WebService接口以及跨域问题解决
    场景VS2019新建WebService/Web服务/asmx并通过IIS实现发布和调用:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/130743584在上面实现发布WebService的基础上,怎样在html中通过jquery对接口发起请求和解析数据。注:博客:https://blog.csdn.net/badao_liumang_qiz......
  • abc269_f Numbered Checker 题解
    NumberedChecker题意有一个\(n\timesm\)的方格矩阵,左上角是\((1,1)\),右下角是\((n,m)\),每个方格中都有一个整数,其中\((x,y)\)中的数字为:如果\(x+y\)是奇数,则\((x,y)\)中的数字为\(0\)。否则,\((x,y)\)中的数字为\((x-1)\timesm+y\)。有\(Q\)组询问,每组......