首页 > 其他分享 >CSP-J2019试题题解

CSP-J2019试题题解

时间:2023-05-19 19:56:02浏览次数:52  
标签:std include int 题解 pri using J2019 CSP dis

1.数字游戏

原题:

https://www.luogu.com.cn/problem/P5660

代码:

#include<bits/stdc++.h>
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
string s; 
int main(){
	cin>>s;int num=0;
	for(int i=0;i<s.length();i++)if(s[i]=='1')num++;
	cout<<num;
	return 0;
}

  

解题思路:

最简单的方法,把数字变成一个字符串,遍历字符串,统计1的个数

 

2.公交换乘

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

代码:

#include<bits/stdc++.h>
using namespace std;
const int N = 1e5+255;
int n,pri[N],t[N],ans=0,fp=1;bool flag[N];
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>flag[i]>>pri[i]>>t[i];
		if(flag[i]==0)ans+=pri[i];
		else{
			bool ok=0;
			while(t[i]-t[fp]>45)fp++;
			for(int j=fp;j<i;j++){
				if(!flag[j]&&pri[j]>=pri[i]){
					ok=1;
					flag[j]=1;
					break;
				}
			}
			if(!ok)ans+=pri[i];
		}
	}
	cout<<ans;
	return 0;
}

  

解题思路:

这题暴力解法只能得45分,其实可以设一个指针,指向每一次花费,遍历时间,如果时间差大于45分钟,指针指向下一个,累加花费就可以了

 

3.纪念品

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

代码:

#include<bits/stdc++.h>
using namespace std;
const int N = 1e6+255;
int T,n,m,dp[N],p[1005][1005];
int main(){
	cin>>T>>n>>m;
	for(int i=1;i<=T;i++){
		for(int j=1;j<=n;j++){
			cin>>p[i][j];
		}
	}
	for(int k=1;k<=T;k++){
		memset(dp,0,sizeof(dp));
		for(int i=1;i<=n;i++){
			for(int j=p[k][i];j<=m;j++){
				dp[j]=max(dp[j],dp[j-p[k][i]]+p[k+1][i]-p[k][i]);
			}
		}
		m+=dp[m];
	}
	cout<<m;
	return 0;
}

  

解题思路:

这道题是完全背包的模版题,每次累加最大价值即可

 

4.加工零件

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

代码:

#include<bits/stdc++.h>
using namespace std;
const int N = 1e5+255;
struct edg{
	int to,next;
}e[4*N];
int n,m,q,a,l,head[N],cnt=-1,dis[N][2];bool vis[N][2];
void add(int x,int y){
	e[++cnt]=(edg){y,head[x]};
	head[x]=cnt;
}
void bfs(){
	queue<int>q;q.push(1);vis[1][0]=1;
	while(q.size()){
		int t=q.front();q.pop();
		for(int i=head[t];~i;i=e[i].next){
			int v=e[i].to;
			if(dis[t][1]+1<dis[v][0]){
				dis[v][0]=dis[t][1]+1;
				if(!vis[v][0]){
					vis[v][0]=1;
					q.push(v);
				}
			}
			if(dis[t][0]+1<dis[v][1]){
				dis[v][1]=dis[t][0]+1;
				if(!vis[v][1]){
					vis[v][1]=1;
					q.push(v);
				}
			}
		}
	}
}
int main(){
	memset(dis,0x7f,sizeof(dis));
	memset(head,-1,sizeof(head));
	cin>>n>>m>>q;
	for(int i=1,x,y;i<=m;i++){
		cin>>x>>y;
		add(x,y);
		add(y,x);
	}
	dis[1][0]=0;
	bfs();
	while(q--){
		cin>>a>>l;
		if(l%2==0)cout<<(l>=dis[a][0]?"Yes\n":"No\n");
		else cout<<(l>=dis[a][1]?"Yes\n":"No\n");
	}
	return 0;
}

  

解题思路:

有的人可能看到题就写了一个深搜,但是数据一大就会超时,所以就要用到奇偶最短路,求出最短路以此判断输出即可

标签:std,include,int,题解,pri,using,J2019,CSP,dis
From: https://www.cnblogs.com/zhanghx-blogs/p/17416132.html

相关文章

  • 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\)组询问,每组......
  • CSP-J2022试题题解
    1.乘方原题:https://www.luogu.com.cn/problem/P8813代码:#include<bits/stdc++.h>#definelllonglongusingnamespacestd;constintXN=1e9;lla,b,ans=1;intmain(){ cin>>a>>b; for(inti=1;i<=b;i++){ ans*=a; if(ans>XN){ cout......