首页 > 其他分享 >2019 CSP-J

2019 CSP-J

时间:2023-11-12 23:14:00浏览次数:36  
标签:const int price maxn 2019 include CSP dis

P5661 [CSP-J 2019] 公交换乘

 就是模拟,注意车票还有使用时间限制,所以在记录坐地铁的时候就要设置时限,如果坐公交车的时间过了所有优惠票那就不能坐,而且也要记录最左边可以用的车票位置

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<vector>
#include<algorithm>
#include<cstdlib>
#include<stack>
using namespace std;
typedef long long LL;
const int INF = 0x3f3f3f3f;
const LL mod = 1e9 + 7;
const int maxn = 1e5+10;
struct node{
	int price,time,used;
}tic[maxn];

int main() {
 	int n,num=0,summ=0,x=1; //x表示能用的优惠票最左边的位置(滑动窗口左边) 
 	cin>>n;
 	int op,pri,tim;
 	for(int i=1;i<=n;i++){
 		cin>>op>>pri>>tim;
 		if(op==0){
 			num++;
 			tic[num].price=pri;tic[num].time=tim+45;tic[num].used=0;
 			summ+=pri;
		 }
		 else{
		 	bool isok=0; //能不能用优惠票 
		 	//优先队列、滑动窗口
			 int newx=x; 
			 for(int k=x;k<=num;k++){
			 	if(tic[k].time<tim){  //如果该票已过期就改编区间左端点的值 
			 		newx=k;
					continue;
				 }
				 if((tic[k].price>=pri)&&tic[k].used==0){
				 	tic[k].used=1;
				 	isok=1;
				 	break;
				 } 
			 }
			 x=newx; 
			 if(isok==0){
			 	summ+=pri;
			 }
		 }
	 }
	 cout<<summ<<endl;
    return 0;
}

  

P5662 [CSP-J2019] 纪念品

居然是背包。。。
把今天手里的钱当做背包的容量,把商品今天的价格当成它的消耗,把商品明天的价格当做它的价值,一天结束后把总钱数加上今天赚的钱,直接写背包模板即可。
另: 在这道题中,我们可以把商品和钱看成同样的东西,因为题目中说了:可以当天买当天卖,所以不必考虑跨天的买卖,只需考虑当天的即可,
这满足动态规划对于最优化原理和无后效性的要求,可以大胆地购买。

每天选完了之后要选择最优结果,作为第二天的起始
也可以从三维推出来
状态!!!:dp[k]表示手里剩k元现金的时候,明天早上都卖了以后的钱数

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<vector>
#include<algorithm>
#include<cstdlib>
#include<stack>
using namespace std;
typedef long long LL;
const int INF = 0x3f3f3f3f;
const LL mod = 1e9 + 7;
const int maxn = 1e2+10;
//居然是背包。。。
/*
把今天手里的钱当做背包的容量,把商品今天的价格当成它的消耗,把商品明天的价格当做它的价值,一天结束后把总钱数加上今天赚的钱,直接写背包模板即可。
另: 在这道题中,我们可以把商品和钱看成同样的东西,因为题目中说了:可以当天买当天卖,所以不必考虑跨天的买卖,只需考虑当天的即可,
这满足动态规划对于最优化原理和无后效性的要求,可以大胆地购买。
*/ 
//也可以从三维推出来 
//状态!!!:dp[k]表示手里剩k元现金的时候,明天早上都卖了以后的钱数
int dp[maxn*100];
int price[maxn][maxn]; 
int main() {
 	int t,n,m;
 	scanf("%d %d %d",&t,&n,&m);
 	for(int i=1;i<=t;i++){
 		for(int j=1;j<=n;j++) scanf("%d ",&price[i][j]);
	 }
	int ans=m;
	//第一天开始的时候为m
	for(int i=1;i<t;i++){
		memset(dp,-0x3f,sizeof(dp)); //先把数组赋值为负无穷
		//什么都不买,今天早上有ans元,明天早上也是ans元
		dp[ans]=ans;
		//枚举第j个物品
		for(int j=1;j<=n;j++){
			for(int k=ans;k>=price[i][j];k--){//手里有k元的时候,去推明天早上的钱
			//买一件物品,现金减少,赚一份差价,完全背包倒着循环
				dp[k-price[i][j]]=max(dp[k-price[i][j]],dp[k]+price[i+1][j]-price[i][j]);
			}
		}
		int maxx=0;
		///找一下明天早上收益最大
		for(int j=0;j<=ans;j++) maxx=max(maxx,dp[j]) ;
		ans=maxx;
	} 
	printf("%d\n",ans);
    return 0;
}

  

P5663 [CSP-J2019] 加工零件

 

这道题先找规律,发现是否需要提供原材料和路径长度奇偶有关系,而且只要
程序数>最短程序数%2路径就需要提供

所以实际是最短路算法,但是需要处理的特殊点是,就是孤立的点,spfa就是直接在原点处理

#include <bits/stdc++.h>
typedef long long LL;
using namespace std;
const int maxn=1e5+10;
//这道题先找规律,发现是否需要提供原材料和路径长度奇偶有关系,而且只要
//程序数>最短程序数%2路径就需要提供
int n,m,q,cnt;
int head[maxn],vis[maxn][2];
int dis[maxn][2],que[maxn*10],q2[maxn*10],h,r;
struct node{
	int u,v,nex;
}ed[maxn*2];
void adde(int u,int v){  //建边 
	ed[++cnt].u=u;
	ed[cnt].v=v;
	ed[cnt].nex=head[u];
	head[u]=cnt;
}
void spfa(){ 
	for(int i=1;i<=n;i++) dis[i][0]=dis[i][1]=1e9;
	dis[1][0]=0;
	h=1;r=0;
	que[++r]=1;
	while(h<=r){
		int u=que[h];
		int t=q2[h];  //一开始为偶数,因为路径为0 
		h++;
		vis[u][t]=0; //出队要清除标记  所以要记录是奇偶 
		for(int i=head[u];i;i=ed[i].nex){
			int v=ed[i].v;
			if(dis[v][0]>dis[u][1]+1){
				dis[v][0]=dis[u][1]+1;
				if(!vis[v][0]){
					vis[v][0]=1;
					que[++r]=v;
					q2[r]=0;  //偶数 
				}
			}
			if(dis[v][1]>dis[u][0]+1){
				dis[v][1]=dis[u][0]+1;
				if(!vis[v][1]){
					vis[v][1]=1;
					que[++r]=v;
					q2[r]=1;
				}
			}
		}
	}
	return;
}
int main()
{
	cin>>n>>m>>q;
	while(m--){
		int u,v;cin>>u>>v;
		adde(u,v);adde(v,u); //双向路 
	}
	spfa();
	if(head[1]==0) dis[1][0]=1e9;//若1点没有连接边,则1的偶数路径没有
	while(q--){
		int u,l;
		cin>>u>>l;
		if(l>=dis[u][l%2]) cout<<"Yes"<<endl;
		else cout<<"No"<<endl;
	}
	return 0;
}

  

标签:const,int,price,maxn,2019,include,CSP,dis
From: https://www.cnblogs.com/shirlybaby/p/17828121.html

相关文章

  • CSP 2023 游记
    J305,S135。2023.9.11~9.15初赛考试前一周每天晚上都在做初赛的模拟赛,每次考得都很难,但做得都不错。2023.9.16(初赛日&生日)今天是14岁生日!(今天考CSP-J/S初赛,考试地点在成都市石室中学。早上六点钟的时候就醒了,翻来覆去都睡不着,挺难受的,感觉自己很紧张,毕竟初赛过不......
  • 蓝桥杯2019 估计人数
    蓝桥杯2019估计人数题目描述给定一个\(N\timesM\)的方格矩阵,矩阵中每个方格标记0或者1代表这个方格是不是有人踩过。已知一个人可能从任意方格开始,之后每一步只能向右或者向下走一格。走了若干步之后,这个人可以离开矩阵。这个人经过的方格都会被标记为1,包括开始和结......
  • Web_BUUCTF_WriteUp | [极客大挑战 2019]EasySQL
    题目靶机界面URL:http://86ae5adf-d39e-47dd-b3da-1ae895847925.node4.buuoj.cn:81/分析先在交互界面随便输入用户名和密码试试,界面显示如下:此时的URL为http://86ae5adf-d39e-47dd-b3da-1ae895847925.node4.buuoj.cn:81/check.php?username=admin&password=123对多出的......
  • CSP-S2019 江西 题解
    为什么有\(5\)道题?[CSP-S2019江西]和积和简单化一下式子:\[(n+1)\times\sumA_i\timesB_i-(\sumA_i)\times(\sumB_i)\]其中\(A,B\)都是前缀和。[CSP-S2019江西]网格图naive的kruskal是很naive的,所以需要一点简单的优化。考虑其本质过程就是按照......
  • [极客大挑战 2019]BuyFlag 1(两种解法)
    题目环境:<br/><br/><br/>FLAGNEEDYOUR100000000MONEYflag需要你的100000000元F12瞅瞅源代码:<br/>if(isset($_POST['password'])){$password=$_POST['password'];if(is_numeric($password)){echo"pas......
  • CSP-2019-S 题解
    做了这套题,如果是让现在的我当时去考的话应该一共可以有450分,格雷码,括号树,树的重心都可以做,树上的数可以有10分,Emiya至少可以有76分,划分也可以有64分。看OIerDB上可以有166名的好成绩。我的代码合集:洛谷/云剪贴板[CSP-S2019]格雷码首先是格雷码有一个很好的生......
  • [BalticOI 2019 Day2] 汤姆的餐厅
    [BalticOI2019Day2]汤姆的餐厅题目背景译自BalticOI2019Day2T1.Tom'sKitchen题目描述Tom'sKitchen是一家非常受欢迎的餐厅,其受欢迎的原因之一是每份菜都由至少$K$名厨师进行准备。今天有$N$份菜需要准备,第$i$份菜的准备时间是$A_i$小时。Tom可以......
  • Math.round(-2019.5)的结果是 -2019
    Math.round()函数返回一个数字四舍五入后最接近的整数如果参数的小数部分大于0.5,四舍五入到相邻的绝对值更大的整数如果参数的小数部分小于0.5,四舍五入到相邻的绝对值更小的整数如果参数的小数部分等于0.5,四舍五入到相邻的在正无穷(+∞)方向上的整数。例:x=Math.round(2019.49);......
  • 通过一道题目带你深入了解WAF特性、PHP超级打印函数、ASCII码chr()对应表等原理[RoarC
    题目环境:<br/>依此输入以下内容并查看回显结果1+11'index.phpls<br/><br/>到这里没思路了F12查看源代码<br/>一定要仔细看啊,差点没找到,笑哭访问calc.php文件<br/>果然有点东西PHP代码审计error_reporting(0);关闭错误报告通过GET方式传参的参数numsho......
  • [ZJCTF 2019]NiZhuanSiWei 1
    1.进入页面2.从代码中可以看出要求,以get方式传递text,file,password三个参数。3.第一层验证if(isset($text)&&(file_get_contents($text,'r')==="welcome to the zjctf"))  传入text,而且file_get_contents($text,'r')之后内容为“welcometothezjctf”  利用php伪协......