Vj程序设计作业H7
A : 卖菜
问题描述
在一条街上有 n 个卖菜的商店,按 1 至 n 的顺序排成一排,这些商店都卖一种蔬菜。
第一天,每个商店都自己定了一个价格。店主们希望自己的菜价和其他商店的一致,第二天,每一家商店都会根据他自己和相邻商店的价格调整自己的价格。具体的,每家商店都会将第二天的菜价设置为自己和相邻商店第一天菜价的平均值(用去尾法取整)。
注意,编号为 1 的商店只有一个相邻的商店 2,编号为 n 的商店只有一个相邻的商店 n-1,其他编号为 i 的商店有两个相邻的商店 i-1 和 i+1。
给定第一天各个商店的菜价,请计算第二天每个商店的菜价。
输入格式
输入的第一行包含一个整数 n,表示商店的数量。
第二行包含 n 个整数,依次表示每个商店第一天的菜价。
输出格式
输出一行,包含 n 个正整数,依次表示每个商店第二天的菜价。
样例输入
8
4 1 3 1 6 5 17 9
样例输出
2 2 1 3 4 9 10 13
数据规模和约定
对于所有评测用例,2 ≤ n ≤ 1000,第一天每个商店的菜价为不超过 10000 的正整数。
解答
#include <bits/stdc++.h>using namespace std;int main()
{int n;cin >> n;int a[n + 1] = {0};int b[n + 1] = {0};for (int i = 1; i <= n; i++){cin >> a[i];}for (int i = 1; i <= n; i++){if (i == 1){b[i] = (a[i] + a[i + 1]) / 2;}else if (i == n){b[i] = (a[i] + a[i - 1]) / 2;}else{b[i] = (a[i] + a[i + 1] + a[i - 1]) / 3;}cout << b[i] << " ";}cout << endl;return 0;
}
B : 买菜
问题描述
小 H 和小 W 来到了一条街上,两人分开买菜,他们买菜的过程可以描述为,去店里买一些菜然后去旁边的一个广场把菜装上车,两人都要买 n 种菜,所以也都要装 n 次车。具体的,对于小 H 来说有 n 个不相交的时间段[a1,b1],[a2,b2]...[an,bn]在装车,对于小 W 来说有 n 个不相交的时间段[c1,d1],[c2,d2]...[cn,dn]在装车。其中,一个时间段[s, t]表示的是从时刻 s 到时刻 t 这段时间,时长为 t-s。
由于他们是好朋友,他们都在广场上装车的时候会聊天,他们想知道他们可以聊多长时间。
输入格式
输入的第一行包含一个正整数 n,表示时间段的数量。
接下来 n 行每行两个数ai,bi,描述小 H 的各个装车的时间段。
接下来 n 行每行两个数ci,di,描述小 W 的各个装车的时间段。
输出格式
输出一行,一个正整数,表示两人可以聊多长时间。
样例输入
4
1 3
5 6
9 13
14 15
2 4
5 7
10 11
13 14
样例输出
3
数据规模和约定
对于所有的评测用例,1 ≤ n ≤ 2000, ai<bi<ai+1,ci<di<ci+1,对于所有的 i(1 ≤ i ≤ n)有,1 ≤ ai,bi,ci,di ≤ 1000000。
解答
#include<bits/stdc++.h>
using namespace std;
int a[1000001] = {0};
int main(){int n;cin >> n;int sum = 0;for (int i = 1; i <= n;i++){int x, y;cin >> x >> y;for (int j = x; j < y;j++){a[j] = 1;}a[y] = 2;}for (int i = 1; i <= n;i++){int x, y;cin >> x >> y;for (int j = x; j <= y;j++){if(a[j]==1 and j!=y){sum++;}// if(a[j] == 2){// sum--;// }}}cout << sum << '\n';return 0;
}
C : 穿越虫洞
问题描述
小 H 有n个秘密基地(编号 1 到 n ),n 个秘密基地之间有 m 条双向路径和 w 个单向时空隧道,通过路径需要消耗一定的时间Ti,而通过时空隧道可以使时光倒流Tj,现在小 H 想知道他能否从某一秘密基地出发,通过路径和时空隧道回到过去(即回到出发的秘密基地且该时刻要早于出发时间)。
输入格式
第1行,一个整数 F,表示测试用例的数量
接下来对于每一个测试用例,输入格式如下
第1行,三个空格分隔的整数n,m,w
第2到 m+1 行,三个空格分隔的数字 s,e,t,表示 s,e 之间存在双向道路,通行需要消耗t,允许两点间存在多条路径
第m+2到m+w+1行三个空间分隔的数字 s,e,t,表示存在从 s 到 e 的单向时空隧道,穿过时空隧道时光倒流 t
输出格式
对于每个测试用例,如果小 H 能回到过去则输出 YES
,否则输出 NO
每个测试用例的输出占一行
样例输入
2
3 3 1
1 2 2
1 3 4
2 3 1
3 1 3
3 2 1
1 2 3
2 3 4
3 1 8
样例输出
NO
YES
数据规模和约定
1≤n≤500,1≤m≤4×104,1≤w≤200
1≤Ti,Tj≤104
解答
#include <bits/stdc++.h>using namespace std;
int dis[510][510];
#define inf 1e8void FF(int n)
{for (int k = 1; k <= n; k++){for (int i = 1; i <= n; i++){for (int j = 1; j <= n; j++){dis[i][j] = min(dis[i][j], dis[i][k] + dis[k][j]);}}}
}
int main()
{int F;cin >> F;for (int ii = 1; ii <= F; ii++){int n, m, w;cin >> n >> m >> w;int s, e, t;// 初始化for (int i = 0; i <= n; i++){for (int j = 0; j <= n; j++){if (i == j){dis[i][j] = 0;}else{dis[i][j] = inf;}}}for (int x = 0; x < m; x++){cin >> s >> e >> t;dis[s][e] = t;dis[e][s] = t;}for (int x = 0; x < w; x++){cin >> s >> e >> t;dis[s][e] = -t;}FF(n);int u = 0;for (; u <= n; u++){if (dis[u][u] < 0){cout << "YES" << endl;break;}}if (u > n){cout << "NO" << endl;}}return 0;
}
D : 差旅花费
问题描述
有 n 个车站,其中 1 号车站为始发站,现有 n-1 个人,你需要安排他们分别去往除始发站以外的 n-1 个车站,然后返回始发站。交通系统的所有路径均为单向路径,连接两个不同的车站,每经过一条路径需要交纳一定的费用,你能求出总花费的最低金额嘛
输入格式
第一行一个整数 T,表示测试用例的个数。
对于每个测试用例,输入格式如下
第一行两个整数 n,m,分别表示车站的数量和车站之间的单向路径数。
接下来 m 行,每行三个数 s,e,c,表示存在从 s 到 e 的单向路径,花费为 c
输出格式
对于每个测试用例,输出其总花费的最低金额,每个测试用例的输出占一行。
样例输入
2
2 2
1 2 13
2 1 33
4 6
1 2 10
2 1 60
1 3 20
3 4 10
2 4 5
4 1 50
样例输出
46
210
数据规模和约定
1<=n,m<=1000000
价格 c 为正整数,且保证其总和小于 1000000000
解答
#include <bits/stdc++.h>using namespace std;
#define N 1000000
#define pa pair<int, int>
#define inf 1e8
int tot, tot2;
int dis[N], vis[N];
int point[N], V[N], W[N], nxt[N];
int dis2[N], vis2[N];
int point2[N], V2[N], W2[N], nxt2[N];
void add(int x, int y, int z)
{tot++;nxt[tot] = point[x];point[x] = tot;V[tot] = y;W[tot] = z;tot2++;nxt2[tot2] = point2[y];point2[y] = tot2;V2[tot2] = x;W2[tot2] = z;
}
void init()
{for (int i = 0; i < N; i++){point[i] = 0;point2[i] = 0;W[i] = 0;W2[i] = 0;V[i] = 0;V2[i] = 0;nxt[i] = 0;nxt2[i] = 0;dis[i] = 0;dis2[i] = 0;vis[i] = 0;vis2[i] = 0;tot = 0;tot2 = 0;}
}
void dj(int s, int n)
{priority_queue<pa, vector<pa>, greater<pa>> q;for (int i = 1; i <= n; i++){dis[i] = inf;vis[i] = 0;}dis[s] = 0;q.push(make_pair(0, s));while (!q.empty()){int x = q.top().second;q.pop();if (vis[x]){continue;}vis[x] = 1;for (int i = point[x]; i; i = nxt[i]){if (dis[V[i]] > dis[x] + W[i]){dis[V[i]] = dis[x] + W[i];q.push(make_pair(dis[V[i]], V[i]));}}}
}void dj2(int s, int n)
{priority_queue<pa, vector<pa>, greater<pa>> q2;for (int i = 1; i <= n; i++){dis2[i] = inf;vis2[i] = 0;}dis2[s] = 0;q2.push(make_pair(0, s));while (!q2.empty()){int x = q2.top().second;q2.pop();if (vis2[x]){continue;}vis2[x] = 1;for (int i = point2[x]; i; i = nxt2[i]){if (dis2[V2[i]] > dis2[x] + W2[i]){dis2[V2[i]] = dis2[x] + W2[i];q2.push(make_pair(dis2[V2[i]], V2[i]));}}}
}int main()
{int T;cin >> T;for (int ss = 1; ss <= T; ss++){int sum = 0;int m, n;cin >> n >> m;int s, e, c;init();for (int i = 1; i <= m; i++){cin >> s >> e >> c;add(s, e, c);}dj(1, n);// dj2(1, n);dj2(1, n);for (int i = 2; i <= n; i++){sum = sum + dis[i] + dis2[i];}cout << sum << endl;}return 0;
}
E : 运输货物
问题描述
考虑一个具有 N 个顶点,M 条边的无向图。编号为 1 的顶点对应于一个矿山,从中提取一些珍贵的矿物。编号为 N 的顶点对应于一家矿物加工厂。每条边连接两个不同的顶点并拥有有两个参数,分别为最大承重量 C 和通行时间 D。现在将从矿山中提取的矿物并选择一条路径将提取的矿物运送至工厂。该路径应具有最大的承重量,以便能够同时运输尽可能多的矿物。路径的承重量等于路径中经过的边的最大承重量的最小值。但是,这些矿物非常敏感,一旦从矿山中提取出来,它们将在 T 时间单位后开始分解,除非他们在此时间间隔内到达工厂。因此,所选路径的总行进时间(其路径的通行时间之和)应小于或等于 T。
输入格式
输入的第一行包含一个整数 X,表示测试用例的数量。
每个测试用例的第一行包含 3 个整数,并用空格分隔:N,M,T。接下来的 M 行中的每行将包含四个整数,每个数字用空格分隔:A,B,C 和 D,这意味着顶点 A 和 B 之间存在一条边,最大承重量为 C,通行时间为 D。A 和 B 是 1 和 N 之间的不同整数。任何两个顶点之间最多存在一个边。
输出格式
对于 X 个测试用例,请输出在满足通行时间限制下的路径最大承重量,每个测试用例对应一行。
数据保证图中至少存在一条 1 到 n 通行总时间小于等于 T 的路径,即一定有解。
样例输入
2
2 1 10
1 2 13 10
4 4 20
1 2 1000 15
2 4 999 6
1 3 100 15
3 4 99 4
样例输出
13
99
数据规模和约定
1≤
Vj程序设计作业H7相关推荐
- Vj程序设计作业H2
A : 相邻数对 问题描述 给定 n 个不同的整数,问这些数中有多少对整数,它们的值正好相差 1. 输入格式 输入的第一行包含一个整数 n,表示给定整数的个数. 第二行包含所给定的 n 个整数. 输出 ...
- Vj程序设计作业H11
A : 爬台阶 题目描述 楼上有 n 级台阶,其中有 m 级台阶是不安全的.yhf 一开始站在第 0 级台阶上,希望最终走到第 n 级台阶 yhf 跨一步满足以下约束: 只能向前走 不能落脚在不安全的 ...
- Vj程序设计作业H6
A : 元音跳跃 问题描述 现在有一个长度为 n 的字符串,都有小写字母组成. 输出最长的连续元音的长度 输入格式 第一行一个整数 n , 0≤n≤106 接下来一行表示字符串 输出格式 输出一行,一 ...
- Vj程序设计作业H3
A : 游戏 问题描述 有 n 个小朋友围成一圈玩游戏,小朋友从 1 至 n 编号,2 号小朋友坐在 1 号小朋友的顺时针方向,3 号小朋友坐在 2 号小朋友的顺时针方向,--,1 号小朋友坐在 n ...
- Vj程序设计作业H4
B : 截绳子 题目描述 有 n 段绳子,长短不一.现在要从中截出 k 段长度相同的绳子.当然,一段绳子可以截出来多段绳子.截出来的绳子最长是多少? 输入格式 第一行两个整数 n 和 k (1≤n,k ...
- Vj程序设计作业H10
A : 小明上学 题目背景 小明是汉东省政法大学附属中学的一名学生,他每天都要骑自行车往返于家和学校.为了能尽可能充足地睡眠,他希望能够预计自己上学所需要的时间.他上学需要经过数段道路,相邻两段道路之 ...
- Vj程序设计作业H12
A : 01背包 题目描述 有 N 件物品和一个容量为 V 的背包.第 i 件物品的重量是 w[i],价值是 c[i].求解将哪些物品装入背包可使这些物品的重量总和不超过背包容量,且价值总和最大. 输 ...
- Vj程序设计作业H8
A : 元音回文 问题描述 现在有一个长度为 n 的字符串,都有小写字母组成. 现在所有元音字母都可以看作相同的字符 输出最长回文子串的长度 一个与自身的逆序相同的字符串即为回文串 比如 aba,aa ...
- 面向对象程序设计作业 6.1~6.4
面向对象程序设计作业 6.1-6.4 面对对象基础题三道.继承多态一道. #include <iostream> #include <string> #include < ...
最新文章
- python入门代码示例-Python入门简单的静态网页爬虫3.0 (爬虫的示例代码)
- [数据库基础]——索引详解
- 调试一个C#研究生管理信息系统源码
- Python中for循环搭配else的陷阱
- android生成aar无效,android studio生成aar包并在其他工程引用aar包的方法
- Java 习题(面向对象)
- signature=267d7b238718fa0d900b4fd94e068fe9,Modelowanie widm NMR kwadrupolowych jąder
- [HDU] 1533 Going Home
- 人脸对齐(十九)--Regressing a 3D Face Shape from a Single Image
- python简明教程3.0_Python3简明教程四
- duilib设置透明窗口_Facebook-duilib 仿 半透明登陆窗口, 简单示例程序,模仿 实现 。 DirextX 240万源代码下载- www.pudn.com...
- 非常棒的口才训练方法
- Java面试题(二)JMM,volatile,CAS
- sql语句的字段升序排列
- RNA-seq流程学习笔记(18)- Heatmap图
- pyCUDA教程-系列学习(1):GPU结构、pyCUDA、numbapro安装及HelloGPU例子
- 最快下载微软必应Bing搜索背景图片的方法
- 如何使用burpsuite对网站进行暴力破解?
- “云”智慧仪器与“云”智慧测试时代——数采DAQ、虚拟仪器VI和“试验室网络云时代”
- 智能/傻瓜交换机、光纤交换机、普通交换机的区别
热门文章
- 内置 230+ 工具,它值得被官方纳入标准库
- matlab钢管的订购和运输,钢管的订购和运输模型程序
- Markdown土拨鼠学习计划
- 微信扫码登录功能报错 errcode 41001.0 errmsg access_token missing rid
- javafx实现桌面录屏录音软件
- 华为云计算HCIE学习总结-灾备
- 光度色度学基础及其在LED照明中的应用
- php的gd不支持jpeg,gd库不支持jpeg的解决方法
- 嵌入式数据库mysql移植_移植MySQL到嵌入式ARM平台
- httpd: Could not reliably determine the server's fully qualified domain name