CSPJ2019真题大全 标题统计,公交换乘,纪念品,零件加工

news/2024/7/5 1:40:12

CSPJ2019A. 数字游戏 (Number Games)

题目描述

小 K 同学向小 P 同学发送了一个长度为 888010101 字符串来玩数字游戏,小 P 同学想要知道字符串中究竟有多少个 111

注意:010101 字符串为每一个字符是 000 或者 111 的字符串,如 101(不含双引号)为一个长度为 333010101 字符串。

输入格式

输入文件只有一行,一个长度为 888010101 字符串 sss

输出格式

输出文件只有一行,包含一个整数,即 010101 字符串中字符 111 的个数。

输入数据 1

00010100 
Copy

输出数据 1

2
Copy

数据范围与提示

对于 20%20\%20% 的数据,保证输入的字符全部为 000

对于 100%100\%100% 的数据,输入只可能包含字符 000 和字符 111,字符串长度固定为 888

#include<bits/stdc++.h>
using namespace std;
long long q,w,e,r,t,y,u,i,o,p,s,d,f,g,h,j,k,l,m,n,v,x,z,kk;
int b[1000];
int a[1000];
int c[1000];
char cc;
int main()
{
	for(i=1;i<=8;i++)
	{
		cin>>cc;
		if(cc=='1')
		k++;
	}
	cout<<k;
	return 0;
}

CSPJ2019B 公交换乘 (Bus Transfer)

题目描述

著名旅游城市 B 市为了鼓励大家采用公共交通方式出行,推出了一种地铁换乘公交车的优惠方案:

  1. 在搭乘一次地铁后可以获得一张优惠票,有效期为 454545 分钟,在有效期内可以消耗这张优惠票,免费搭乘一次票价不超过地铁票价的公交车。在有效期内指 开始乘公交车的时间与开始乘地铁的时间之差小于等于 454545 分钟,即:tbus−tsubway≤45t_{bus}-t_{subway} \le 45tbustsubway45
  2. 搭乘地铁获得的优惠票可以累积,即可以连续搭乘若干次地铁后再连续使用优惠票搭乘公交车。
  3. 搭乘公交车时,如果可以使用优惠票一定会使用优惠票;如果有多张优惠票满足条件,则优先消耗获得最早的优惠票。现在你得到了小轩最近的公共交通出行记录,你能帮他算算他的花费吗?

输入格式

输入文件的第一行包含一个正整数 nnn,代表乘车记录的数量。

接下来的 nnn 行,每行包含 333 个整数,相邻两数之间以一个空格分隔。第 iii 行的第 111 个整数代表第 iii 条记录乘坐的交通工具,000 代表地铁,111 代表公交车;第 222 个整数代表第 iii 条记录乘车的票价 priceiprice_ipricei ;第三个整数代表第 iii 条记录开始乘车的时间 tit_iti (距 000 时刻的分钟数)。

我们保证出行记录是按照开始乘车的时间顺序给出的,且不会有两次乘车记录出现在同一分钟。

输出格式

输出文件有一行,包含一个正整数,代表小轩出行的总花费

输入数据 1

6
0 10 3
1 5 46
0 12 50
1 3 96
0 5 110
1 6 135
Copy

输出数据 1

36
Copy

第一条记录,在第 3 分钟花费 10 元乘坐地铁。

第二条记录,在第 46 分钟乘坐公交车,可以使用第一条记录中乘坐地铁获得的优惠票,因此没有花费。

第三条记录,在第 50 分种花费 12 元乘坐地铁。

第四条记录,在第 96 分钟乘坐公交车,由于距离第三条记录中乘坐地铁已超过 45分钟,所以优惠票已失效,花费 3 元乘坐公交车。

第五条记录,在第 110 分钟花费 5 元乘坐地铁。

第六条记录,在第 135 分钟乘坐公交车,由于此时手中只有第五条记录中乘坐地铁获得的优惠票有效,而本次公交车的票价为 6 元,高于第五条记录中地铁的票价 5 元,所以不能使用优惠票,花费 6 元乘坐公交车。

总共花费 36 元。

输入数据 2

6
0 5 1
0 20 16
0 7 23
1 18 31
1 4 38
1 7 68
Copy

输出数据 2

32
Copy

第一条记录,在第 1 分钟花费 5 元乘坐地铁。

第二条记录,在第 16 分钟花费 20 元乘坐地铁。

第三条记录,在第 23 分钟花费 7 元乘坐地铁。

第四条记录,在第 31 分钟乘坐公交车,此时只有第二条记录中乘坐的地铁票价高于本次公交车票价,所以使用第二条记录中乘坐地铁获得的优惠票。

第五条记录,在第 38 分钟乘坐公交车,此时第一条和第三条记录中乘坐地铁获得的优惠票都可以使用,使用获得最早的优惠票,即第一条记录中乘坐地铁获得的优惠票。

第六条记录,在第 68 分钟乘坐公交车,使用第三条记录中乘坐地铁获得的优惠票。

总共花费 32 元。

数据范围与提示

对于 30%30\%30% 的数据,n≤1000n \le 1000n1000ti≤106t_i \le 10^6ti106
另有 15%15\%15% 的数据,ti≤107t_i \le 10^7ti107priceiprice_ipricei都相等。
另有 15%15\%15% 的数据,ti≤109t_i \le 10^9ti109priceiprice_ipricei都相等。
对于 100%100\%100% 的数据,n≤105n \le 10^5n105ti≤109t_i \le 10^9ti1091≤pricei≤10001 \le price_i \le 10001pricei1000

#include<bits/stdc++.h>
using namespace std;
int opt,n,t[100001],p[100001],ans,top,m=1,yh[100001],sj[100001],k;
bool r[100001];
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>opt>>p[i]>>t[i];
		if(opt==0) yh[++top]=p[i],sj[top]=t[i],ans+=p[i];
		else{
			k=0;
			for(int j=m;j<=top;j++){
				if(r[j]) continue;
				if(t[i]-sj[j]>45) m=j;
				else if(yh[j]>=p[i]){
					k=j;
					r[k]=true;
					break;
				}
			}
			if(!k) ans+=p[i];
		}
	}///test
	cout<<ans;
}

CSPJ2019C. 纪念品 (Souvenir)

题目描述

小伟突然获得一种超能力,他知道未来 TTTNNN 种纪念品每天的价格。某个纪念品的价格是指购买一个该纪念品所需的金币数量,以及卖出一个该纪念品换回的金币数量。

每天,小伟可以进行以下两种交易无限次:

  1. 任选一个纪念品,若手上有足够金币,以当日价格购买该纪念品;
  2. 卖出持有的任意一个纪念品,以当日价格换回金币。

每天卖出纪念品换回的金币可以立即用于购买纪念品,当日购买的纪念品也可以当日卖出换回金币。当然,一直持有纪念品也是可以的。

TTT 天之后,小伟的超能力消失。因此他一定会在第 TTT 天卖出所有纪念品换回金币。

小伟现在有 MMM 枚金币,他想要在超能力消失后拥有尽可能多的金币。

输入格式

第一行包含三个正整数 TTT, NNN, MMM,相邻两数之间以一个空格分开,分别代表未来天数 TTT,纪念品数量 NNN,小伟现在拥有的金币数量 MMM

接下来 TTT 行,每行包含 NNN 个正整数,相邻两数之间以一个空格分隔。第 iii 行的 NNN 个正整数分别为 Pi,1P_{i,1}Pi,1,Pi,2P_{i,2}Pi,2 , ...... , Pi,NP_{i,N}Pi,N, 其中 Pi,jP_{i,j}Pi,j 表示第 iii 天第 jjj 种纪念品的价格。

输出格式

输出仅一行,包含一个正整数,表示小伟在超能力消失后最多能拥有的金币数量。

输入数据 1

6 1 100
50
20
25
20
25
50
Copy

输出数据 1

305
Copy

最佳策略是:

第二天花光所有 100100100 枚金币买入 555 个纪念品 111
第三天卖出 555 个纪念品 111,获得金币 125125125 枚;
第四天买入 666 个纪念品 111,剩余 555 枚金币;
第六天必须卖出所有纪念品换回 300300300 枚金币,第四天剩余 555 枚金币,共 305305305 枚金币。

超能力消失后,小伟最多拥有 305305305 枚金币。

输入数据 2

3 3 100
10 20 15
15 17 13
15 25 16
Copy

输出数据 2

217
Copy

最佳策略是:

第一天花光所有金币买入 101010 个纪念品 111
第二天卖出全部纪念品 111 得到 150150150 枚金币并买入 888 个纪念品 222111 个纪念品 333,剩余 111 枚金币;
第三天必须卖出所有纪念品换回 216216216 枚金币,第二天剩余 111 枚金币,共 217217217 枚金币。

超能力消失后,小伟最多拥有 217217217 枚金币。

数据范围与提示

对于 10%10\%10% 的数据,T=1T = 1T=1
对于 30%30\%30% 的数据,T≤4,N≤4,M≤100T \le 4, N \le 4, M \le 100T4,N4,M100,所有价格 10≤Pi,j≤100110 \le P_{i,j} \le 100110Pi,j1001
另有 15%15\%15% 的数据,T≤100,N=1T \le 100, N = 1T100,N=1
另有 15%15\%15% 的数据,T=2,N≤100T = 2,N \le 100T=2,N100
对于 100%100\%100% 的数据,T≤100,N≤100,M≤103T \le 100, N \le 100, M \le 10^3T100,N100,M103,所有价格 1≤Pi,j≤1041 \le P_{i,j} \le 10^4 1Pi,j104,数据保证任意时刻,小明手上的金币数不可能超过 10410^4104

#include <iostream>
#include <cstring>
#include <cstdio>

using namespace std;
const int MAXN = 105;

//dp[k]表示手里剩k元现金的时候,明天早上都卖了以后的钱数
//price[i][j]表示第i天第j件物品的价格
int dp[10005], price[MAXN][MAXN];

int main() {
    int t, n, m, ans;
    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]);
        }
    }
    //第一天早上手里有m元
    ans = 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) {
            //手里有k元的时候,去推明天早上的钱
            for (int k = ans; k >= price[i][j]; --k) {
                //买一件物品,现金减少,赚一份差价,完全背包倒着循环
                dp[k - price[i][j]] = max(dp[k - price[i][j]], dp[k] + price[i + 1][j] - price[i][j]);
            }
        }
        //找一下明天早上收益最大
        int ma = 0;
        for (int j = 0; j <= ans; ++j) {
            ma = max(ma, dp[j]);
        }
        //明天早上就有这么多钱了,继续赚钱
        ans = ma;
    }
    cout << ans << endl;
    return 0;
}

CSPJ2019D. 零件加工 (Parts Processing)

题目描述

凯凯的工厂正在有条不紊地生产一种神奇的零件,神奇的零件的生产过程自然也很神奇。工厂里有 nnn 位工人,工人们从 1∼n1 \sim n1n 编号。某些工人之间存在双向的零件传送带。保证每两名工人之间最多只存在一条传送带。

如果 xxx 号工人想生产一个被加工到第 L(L>1)L (L \gt 1)L(L>1) 阶段的零件,则所有与 xxx 号工人有传送带直接相连的工人,都需要生产一个被加工到第 L−1L - 1L1 阶段的零件(但 xxx 号工人自己无需生产第 L−1L - 1L1 阶段的零件)。

如果 xxx 号工人想生产一个被加工到第 111 阶段的零件,则所有与 xxx 号工人有传送带直接相连的工人,都需要为 xxx 号工人提供一个原材料。

轩轩是 111 号工人。现在给出 qqq 张工单,第 iii 张工单表示编号为 aia_iai 的工人想生产一个第 LiL_iLi阶段的零件。轩轩想知道对于每张工单,他是否需要给别人提供原材料。他知道聪明的你一定可以帮他计算出来!

输入格式

第一行三个正整数 nnnmmmqqq,分别表示工人的数目、传送带的数目和工单的数目。

接下来 mmm 行,每行两个正整数 uuuvvv,表示编号为 uuuvvv 的工人之间存在一条零件传输带。保证 u≠vu \neq vu=v

接下来 qqq 行,每行两个正整数 aaaLLL,表示编号为 aaa 的工人想生产一个第 LLL 阶段的零件。

输出格式

qqq 行,每行一个字符串 Yes 或者 No。'

如果按照第 iii 张工单生产,需要编号为 111 的轩轩提供原材料,则在第 iii 行输出 Yes;否则在第 iii 行输出 No

输入数据 1

3 2 6
1 2
2 3
1 1
2 1
3 1
1 2
2 2
3 2
Copy

输出数据 1

No
Yes
No
Yes
No
Yes
Copy

编号为 1 的工人想生产第 1 阶段的零件,需要编号为 2 的工人提供原材料。

编号为 2 的工人想生产第 1 阶段的零件,需要编号为 1 和 3 的工人提供原材料。

编号为 3 的工人想生产第 1 阶段的零件,需要编号为 2 的工人提供原材料。

编号为 1 的工人想生产第 2 阶段的零件,需要编号为 2 的工人生产第 1 阶段的零件,需要编号为 1 和 3 的工人提供原材料。

编号为 2 的工人想生产第 2 阶段的零件,需要编号为 1 和 3 的工人生产第 1 阶段的零件,他/她们都需要编号为 2 的工人提供原材料。

编号为 3 的工人想生产第 2 阶段的零件,需要编号为 2 的工人生产第 1 阶段的零件,需要编号为 1 和 3 的工人提供原材料。

输入数据 2

5 5 5
1 2
2 3
3 4
4 5
1 5
1 1
1 2
1 3
1 4
1 5
Copy

输出数据 2

No
Yes
No
Yes
Yes
Copy

编号为 1 的工人想生产第 1 阶段的零件,需要编号为 2 和 5 的工人提供原材料。

编号为 1 的工人想生产第 2 阶段的零件,需要编号为 2 和 5 的工人生产第 1 阶段的零件,需要编号为 1,3,4 的工人提供原材料。

编号为 1 的工人想生产第 3 阶段的零件,需要编号为 2 和 5 的工人生产第 2 阶段第10页共10页的零件,需要编号为 1,3,4 的工人生产第 1 阶段的零件,需要编号为 2,3,4,5 的工人提供原材料。

编号为 1 的工人想生产第 4 阶段的零件,需要编号为 2 和 5 的工人生产第 3 阶段的零件,需要编号为 1,3,4 的工人生产第 2 阶段的零件,需要编号为 2,3,4,5 的工人生产第 1 阶段的零件,需要全部工人提供原材料。

编号为 1 的工人想生产第 5 阶段的零件,需要编号为 2 和 5 的工人生产第 4 阶段的零件,需要编号为 1,3,4 的工人生产第 3 阶段的零件,需要编号为 2,3,4,5 的工人生产第 2 阶段的零件,需要全部工人生产第 1 阶段的零件,需要全部工人提供原材料。

数据范围与提示

202020 个测试点。

  • 1≤u,v,a≤n1 \le u, v, a \le n 1u,v,an

测试点 1∼41 \sim 414 , 1≤n,m≤1000,q=3,L=11 \le n, m \le 1000, q = 3,L = 1 1n,m1000,q=3L=1

测试点 5∼85 \sim 858 , 1≤n,m≤1000,q=3,1≤L≤101 \leq n, m \le 1000, q = 3,1 \le L \le101n,m1000,q=31L10

测试点 9∼129 \sim 12912 , 1≤n,m,L≤1000,1≤q≤1001 \leq n, m, L \le 1000, 1 \le q \le 1001n,m,L1000,1q100

测试点 13∼1613 \sim 161316, 1≤n,m,L≤1000,1≤q≤1051 \le n, m, L \le 1000, 1 \le q \leq 10^51n,m,L1000,1q105

测试点 17∼2017 \sim 201720, 1≤n,m,q≤105,1≤L≤1091 \le n, m, q \le 10^5 , 1 \le L \leq 10^91n,m,q105,1L109

#include <bits/stdc++.h>
using namespace std;
template<typename T>inline void read(T &FF){
	T RR=1;FF=0;char CH=getchar();
	for(;!isdigit(CH);CH=getchar())if(CH=='-')RR=-1;
	for(;isdigit(CH);CH=getchar())FF=(FF<<1)+(FF<<3)+(CH^48);
	FF*=RR;
}
template<typename T>void write(T x){
	if(x<0)putchar('-'),x*=-1;
	if(x>9)write(x/10);
	putchar(x%10+48);
}
vector<int>v[100010];
int ji[100010],ou[100010];
void bfw(){//我有一个好朋友叫bfw,所以我写bfs时,喜欢把函数名起为bfw
	memset(ji,0x3f,sizeof(ji));//奇数最短路径
	memset(ou,0x3f,sizeof(ou));//偶数最短路径
	queue<pair<int,int> >q;
	for(int i=0;i<v[1].size();i++){
		ji[v[1][i]]=1;
		q.push(make_pair(v[1][i],1));
	}
	while(q.size()){
		int x=q.front().first,y=q.front().second;
		for(int i=0;i<v[x].size();i++){
			if(y%2==1){//奇数+1=偶数
				if(y+1<ou[v[x][i]]){
					ou[v[x][i]]=y+1;//更新答案
					q.push(make_pair(v[x][i],y+1));
				}
			}else{//偶数+1=奇数
				if(y+1<ji[v[x][i]]){
					ji[v[x][i]]=y+1;//更新答案
					q.push(make_pair(v[x][i],y+1));
				}
			}
		}
		q.pop();
	}
}
int main(){
	int n,m,q;
	read(n);read(m);read(q);
	for(int i=1;i<=m;i++){
		int x,y;
		read(x);read(y);//无向边
		v[x].push_back(y);//连边
		v[y].push_back(x);//连边
	}
	bfw();//跑最短路
	while(q--){
		int x,y;
		read(x);read(y);
		if(y%2==0){
			if(ou[x]>y)puts("No");//如果大于就不可能了
			else puts("Yes");
		}else{
			if(ji[x]>y)puts("No");//如果大于就不可能了
			else puts("Yes");
		}
	}
	return 0;
}

http://lihuaxi.xjx100.cn/news/1472788.html

相关文章

算法随笔:强连通分量

概念和性质&#xff1a; 强连通&#xff1a;在有向图G中&#xff0c;如果两个点u和v是互相可达的&#xff0c;即从u出发可以到达v&#xff0c;从v出发也可以到达u&#xff0c;则成u和v是强连通的。 强连通分量&#xff1a;如果一个有向图G不是强连通图&#xff0c;那么可以把它…

华为云部署JDK环境

一、确定系统内核 在下载jdk之前要先确定自己的内核是什么版本&#xff0c;因为我选的云服务器是CentOS7&#xff0c;所以一定是Linux_86_64版本。 若不确定可以在命令行中输入“uname -a”来查看系统内核。 二、下载JDK 到官网下载对应统信系统版本的jdk安装包 jdk官网&…

详解FreeRTOS:FreeRTOS任务管理函数(基础篇—11)

目录 1、任务创建和删除函数 1.1、xTaxkCreate()函数 1.2、xTaskCreateStatic()函数 1.3、xTaskCreateRestricted()函数 1.4、vT

js设置根据设备浏览器宽高或者端侧提供的宽高 来计算缩放

设置meta: <meta name="viewport" id="viewport" content="width=360, initial-scale=1.0833333333333333, maximum-scale=1.0833333333333333, user-scalable=no"> 实现部分: let scale = 1; let BrowserInfo = { isAndroi…

详细介绍如何基于ESP32实现气象站数据显示--附源码

功能介绍&#xff1a; 驱动ili9341 从京东获取天气数据 开始使用 拿到钥匙 1.从京东注册账号 2.从网站获取密钥 安装ESP32 SDK ESP-IDF Programming Guide - ESP32 - — ESP-IDF Programming Guide latest documentation 笔记&#xff1a; 该项目兼容 ESP-IDF 3.X 分支和 4…

Android SDK 上手指南||第四章 应用程序结构

第四章 应用程序结构 本教程将主要以探索与了解为主要目的&#xff0c;但后续的系列文章则将进一步带大家深入学习如何创建用户界面、响应用户交互操作以及利用Java编排应用逻辑。我们将专注于大家刚刚开始接触Android开发时最常遇到的项目内容&#xff0c;但也会同时涉及一部…

wireshark数据包分析

一、实验目的&#xff1a; 掌握wireshark进行基本的协议分析&#xff0c;掌握TCP的三次握手的过程 二、预备知识&#xff1a; TCP/IP协议的三次握手的设计 三、实验过程&#xff1a; 1.关于wireshark这个软件的基本认识&#xff1a; 首先&#xff0c;每次capure的时候&#…

Ajax 请求到底应该放在 created 里还是 mounted 里???

示例代码 定义了一个数据 list&#xff0c;默认是空数组 定义了一个 API 请求&#xff0c;getDat 还定义了两个生命周期钩子 created 和 mounted 分析在 created 里的情况 这个时候&#xff0c;我们是能够成功发送 API 请求获取到数据的&#xff0c;控制台会打印 created&…