A : 小明上学

题目背景

小明是汉东省政法大学附属中学的一名学生,他每天都要骑自行车往返于家和学校。为了能尽可能充足地睡眠,他希望能够预计自己上学所需要的时间。他上学需要经过数段道路,相邻两段道路之间设有至多一盏红绿灯。

京州市的红绿灯是这样工作的:每盏红绿灯有红、黄、绿三盏灯和一个能够显示倒计时的显示牌。假设红绿灯被设定为红灯 r 秒,黄灯 y 秒,绿灯 g 秒,那么从 0 时刻起,[0,r) 秒内亮红灯,车辆不许通过;[r,r+g) 秒内亮绿灯,车辆允许通过;[r+g,r+g+y) 秒内亮黄灯,车辆不许通过,然后依次循环。倒计时的显示牌上显示的数字 l(l>0)是指距离下一次信号灯变化的秒数。

问题描述

一次上学的路上,小明记录下了经过每段路的时间,和各个红绿灯在小明到达路口时的颜色和倒计时秒数。希望你帮忙计算此次小明上学所用的时间。

输入格式

输入的第一行包含空格分隔的三个正整数 r、y、g,表示红绿灯的设置。这三个数均不超过 106。

输入的第二行包含一个正整数 n(n≤100),表示小明总共经过的道路段数和看到的红绿灯数目。

接下来的 n 行,每行包含空格分隔的两个整数 k、t。k=0 表示经过了一段道路,耗时 t 秒,此处 t 不超过 106;k=1、2、3 时,分别表示看到了一个红灯、黄灯、绿灯,且倒计时显示牌上显示的数字是 t,此处 t 分别不会超过 r、y、g。

输出格式

输出一个数字,表示此次小明上学所用的时间。

样例输入

30 3 30
8
0 10
1 5
0 11
2 2
0 6
0 3
3 10
0 3

样例输出

70

样例说明

小明先经过第一段道路,用时 10 秒,然后等待 5 秒的红灯,再经过第二段道路,用时 11 秒,然后等待 2 秒的黄灯和 30 秒的红灯,再经过第三段、第四段道路,分别用时6、3秒,然后通过绿灯,再经过最后一段道路,用时 3 秒。共计 10+5+11+2+30+6+3+3=70 秒。

评测用例规模与约定

测试点 1, 2 中不存在任何信号灯。
测试点 3, 4 中所有的信号灯在被观察时均为绿灯。
测试点 5, 6 中所有的信号灯在被观察时均为红灯。
测试点 7, 8 中所有的信号灯在被观察时均为黄灯。
测试点 9, 10 中将出现各种可能的情况。

解答

#include <bits/stdc++.h>using namespace std;void play(){int r, y, g;cin >> r >> y >> g;int n;cin >> n;int k, t;int sum = 0;for (int i = 1; i <= n; i++){cin >> k >> t;if(k == 1){sum = sum + t;}else if(k == 2){sum = sum + t + r;}else if(k == 3){continue;}else if(k == 0){sum = sum + t;}}cout << sum << endl;
}int main(){play();return 0;
}

B : 小中大

题目背景

在数据分析中,最小值最大值以及中位数是常用的统计信息。

题目描述

老师给了你 n 个整数组成的测量数据,不保证有序,可能存在重复的数据。请统计出这组测量数据中的最大值、中位数以及最小值,并按照从大到小的顺序输出这三个数。

输入格式

从标准输入读入数据。
第一行输入一个整数 n,在第二行中存在 n 个整数,表示测量数据,可能存在多个整数相等,整数与整数之间使用空格隔开。

输出格式

输出到标准输出。
包含一行,包括最大值、中位数以及最小值共三个数,并按照从大到小的顺序输出。数据与数据之间使用空格隔开。对于整数请直接输出整数,对于可能出现的分数,请输出四舍五入保留 1 位小数的结果。

样例 1 输入

3
-1 2 4

样例 1 输出

4 2 -1

样例 1 解释

4 为最大值,2 为中位数,−1 为最小值。

样例 2 输入

4
-2 -1 3 4

样例 2 输出

4 1 -2

样例 2 解释

4 为最大值,(−1+3)÷2=1 为中位数,−2为最小值。

子任务

解答

#include <bits/stdc++.h>using namespace std;void play(){int n;cin >> n;float a[n];for (int i = 0; i < n; i++){cin >> a[i];}sort(a, a + n);// cout << a[n - 1] << " ";printf("%.0f", a[n - 1]);cout << " ";if(n % 2 == 1){int c = n / 2;// cout <<int f = (int)a[c];if(a[c]-f == 0){printf("%.0f", a[c]);}else{printf("%.1f", a[c]);}}else{int c = n / 2;int f = (int)(a[c] + a[c - 1]) / 2;float p = (a[c] + a[c - 1]) / 2;if(p - f == 0){printf("%d", f);}else{printf("%.1f", p);}// printf("%.1f", (a[c] + a[c - 1]));}cout << " ";// cout << a[0] << endl;printf("%.0f\n", a[0]);
}int main(){play();return 0;
}

C : 树状数组

题目描述

给定数列 a1​,a2​,…,an​,你需要依次进行 q 个操作,操作有两类:

  • 1 i x:给定 i,x,将 ai​ 加上 x;
  • 2 l r:给定 l,r,求 ∑i=lr​ai​ 的值(换言之,求 al​+al+1​+⋯+ar​ 的值)。

输入格式

第一行包含 2 个正整数 n,q,表示数列长度和询问个数。保证 1≤n,q≤106。
第二行 n 个整数 a1​,a2​,…,an​,表示初始数列。保证 ∣ai​∣≤106。
接下来 q 行,每行一个操作,为以下两种之一:

  • 1 i x:给定 i,x,将 a[i] 加上 x;
  • 2 l r:给定 l,r,求 ∑i=lr​ai​ 的值。

保证 1≤l≤r≤n, ∣x∣≤106。

输出格式

对于每个 2 l r 操作输出一行,每行有一个整数,表示所求的结果。

样例

输入样例

3 2
1 2 3
1 2 0
2 1 3

输出样例

6

数据范围

对于所有数据,1≤n,q≤106, ∣ai​∣≤106, 1≤l≤r≤n, ∣x∣≤106。

解答

#include <bits/stdc++.h>using namespace std;
long long b[1000002],a[1000002];
long long n;
long long lowbit(long long x){return x & (-x);
}
void init(){for (long long i = 0; i < n;i++){b[i] = 0;a[i] = 0;}
}
long long ask(long long p){long long res = 0;for (long long i = p; i > 0;i-=lowbit(i)){res += b[i];}return res;
}void play(){long long x, y, z;cin >> x >> y >> z;if(x == 1){long long r = y;a[y] += z;// long long g = lowbit(y);while(r <=n){b[r] += z;// a[r] += z;r = r + lowbit(r);}}else if(x == 2){cout << ask(z) - ask(y) + a[y] << endl;}
}int main(){long long q;cin >> n >> q;// long long a[n+1] = {0};init();for (long long i = 1; i <= n;i++){cin >> a[i];}for (long long i = 1; i <= n;i++){long long f = lowbit(i);for (long long j = 0; j < f;j++){b[i] = b[i] + a[i - j];}}for (long long i = 1; i <= q; i++){play();}return 0;
}

D : 排名

题目描述

sys 参加了一场 AI 算法大赛,大赛要求参赛者提供一个程序,后台的评测系统会使用相同的数据对所有提交程序进行评测,通过程序的运行时间内存占用来衡量一个算法的好坏。

比赛的成绩计算方法为,给每一个程序进行打分,对于一个程序来说,该程序的得分为:运行时间内存占用均小于等于该程序的程序的数量。

现在需要你来计算,成绩为 0,1,…n−1 的程序的数量分别为多少。

输入格式

第一行一个整数 N,表示程序的数目;
接下来 N 行给出每个程序的运行时间与内存占用,用两个空格隔开的整数表示;
不会有两个程序的运行时间与内存占用均相同。

输出格式

n 行,每行一个整数,分别是得分为 0,1,2,…,n−1 的程序的数目。

样例

输入

5
1 1
5 1
7 1
3 3
5 5

输出

1
2
1
1
0

样例解释

得分为 0 的程序为 (1 1)

得分为 1 的程序为 (5 1) (3 3)

得分为 2 的程序为 (7 1)

得分为 3 的程序为 (5 5)

得分为 4 的程序为:无

数据范围

对于全部数据,1≤n≤106,0≤运行时间,内存占用≤106。

解答

#include <bits/stdc++.h>using namespace std;
long long N;
long long sc[1000010],s[1000010];
void init(){for (long long i = 0; i <= N;i++){sc[i] = 0;s[i] = 0;}
}
long long lowbit(long long d){return d & (-d);
}
void update(int p){for (int i = p; i <= 1000010;i+=lowbit(i)){s[i] += 1;}
}
long long ask(long long p){long long res = 0;for (long long i = p; i >= 1;i-=lowbit(i)){res += s[i];}return res;
}int main(){ios::sync_with_stdio(0);// cin >> N;scanf("%lld", &N);pair<long long, long long> a[N + 1];init();for (int i = 1; i <= N;i++){// cin >> a[i].first >> a[i].second;scanf("%lld%lld", &a[i].first, &a[i].second);a[i].second++;}// int f = 0;sort(a + 1, a + N + 1);for (int i = 1; i <= N;i++){sc[ask(a[i].second)]++;update(a[i].second);}for (int i = 0; i < N;i++){// cout << sc[i] << endl;printf("%lld\n", sc[i]);// cout << endl;}return 0;
}

E : 火星饭店

题目描述

lzh 在火星开了一家饭店,为了吸引顾客,饭店会不定期在菜谱中加入新菜,每个菜都有一个美味度 l(0≤l<p)。

饭店使用手机进行点餐,手机上展示的菜谱会按照更新的顺序逆序排列。由于不同顾客的手机屏幕分辨率大小不同,所以能够显示在第一屏的菜谱的数量也不同。根据调查发现,火星用户只会在第一屏的菜品中选择美味度最高的购买。

现在按照时间顺序输入 m 个添加菜品或顾客点菜的操作,请输出每位点菜顾客所点的菜的美味度。

输入格式

第一行有两个正整数 m,p,意义如题目描述;

接下来 m 行,每一行表示一个操作。

  • 如果该行的内容是 Q L,则表示有顾客进行了点菜,该顾客的手机屏幕可以显示 L 个菜品;
  • 如果是 A t,则表示加入了新的菜品,菜品的美味度是 (t+a)modp。
    • t 是输入的参数
    • a 是在这个添加操作之前最后一个点菜操作的答案(如果之前没有点菜操作,则 a=0)。

数据保证第一个操作一定是添加菜品。在顾客点菜时,L>0 且不超过当前已有菜品的数量。

输出格式

对于每一个点菜操作,输出一行。该行只有一个数,即当前屏幕中美味度最大的菜品的美味度。

样例

输入

10 100
A 97
Q 1
Q 1
A 17
Q 2
A 63
Q 1
Q 1
Q 3
A 99

输出

97
97
97
60
60
97

数据范围

对于全部数据,1≤m≤2×105,1≤p≤2×109,0≤t<p。

解答

#include <bits/stdc++.h>
#define ll long long
using namespace std;
ll m, p;
ll a[1000010], d[4000040];
// long long sc[1000010],d[1000010];// int tot;void build(int x,int l,int r){if(l ==r){d[x] = a[l];return;}int mid = (l + r) / 2;build(x * 2, l, mid);build(x * 2 + 1, mid + 1, r);d[x] = max(d[x * 2], d[x * 2 + 1]);
}void update(int x,int l,int r,int pos,int v){if(l==r){d[x] += v;return;}int mid = (l + r) / 2;if(pos<=mid){update(x * 2, l, mid,pos,v);}else{update(x * 2+1, mid + 1, r, pos, v);}d[x] = max(d[x * 2], d[x * 2 + 1]);
}ll ask(int x, int l, int r, int p1, int p2){if(l == p1 and r ==p2){return d[x];}int mid = (l + r) / 2;if(p2<=mid){return ask(x * 2, l, mid, p1, p2);// }else if(mid>p1){}else if(p1>mid){return ask(x * 2+1, mid + 1, r, p1, p2);}else{ll le = ask(x * 2, l, mid, p1, mid);ll re = ask(x * 2+1, mid + 1, r, mid + 1, p2);return max(le, re);}
}
int main(){memset(a, 0, sizeof(a));memset(d, 0, sizeof(d));// freopen("1.in", "r", stdin);// freopen("1.out", "w", stdout);cin >> m >> p;build(1, 1, m);int x=0;int tot = 1;ll zz=0;for (int i = 1; i <= m;i++){char ff;// int b;cin >> ff;if(ff=='Q'){int b;cin >> b;zz = ask(1,1,m,tot - b, tot - 1);cout << zz << endl;}else if(ff =='A'){int b;cin >> b;// ll e = (b + e) % p;ll e;// cin >> e;e = (b + zz) % p;update(1, 1, m, tot, e);tot++;}}return 0;
}

Vj程序设计作业H10相关推荐

  1. Vj程序设计作业H2

    A : 相邻数对 问题描述 给定 n 个不同的整数,问这些数中有多少对整数,它们的值正好相差 1. 输入格式 输入的第一行包含一个整数 n,表示给定整数的个数. 第二行包含所给定的 n 个整数. 输出 ...

  2. Vj程序设计作业H11

    A : 爬台阶 题目描述 楼上有 n 级台阶,其中有 m 级台阶是不安全的.yhf 一开始站在第 0 级台阶上,希望最终走到第 n 级台阶 yhf 跨一步满足以下约束: 只能向前走 不能落脚在不安全的 ...

  3. Vj程序设计作业H6

    A : 元音跳跃 问题描述 现在有一个长度为 n 的字符串,都有小写字母组成. 输出最长的连续元音的长度 输入格式 第一行一个整数 n , 0≤n≤106 接下来一行表示字符串 输出格式 输出一行,一 ...

  4. Vj程序设计作业H3

    A : 游戏 问题描述 有 n 个小朋友围成一圈玩游戏,小朋友从 1 至 n 编号,2 号小朋友坐在 1 号小朋友的顺时针方向,3 号小朋友坐在 2 号小朋友的顺时针方向,--,1 号小朋友坐在 n ...

  5. Vj程序设计作业H4

    B : 截绳子 题目描述 有 n 段绳子,长短不一.现在要从中截出 k 段长度相同的绳子.当然,一段绳子可以截出来多段绳子.截出来的绳子最长是多少? 输入格式 第一行两个整数 n 和 k (1≤n,k ...

  6. Vj程序设计作业H7

    A : 卖菜 问题描述 在一条街上有 n 个卖菜的商店,按 1 至 n 的顺序排成一排,这些商店都卖一种蔬菜. 第一天,每个商店都自己定了一个价格.店主们希望自己的菜价和其他商店的一致,第二天,每一家 ...

  7. Vj程序设计作业H12

    A : 01背包 题目描述 有 N 件物品和一个容量为 V 的背包.第 i 件物品的重量是 w[i],价值是 c[i].求解将哪些物品装入背包可使这些物品的重量总和不超过背包容量,且价值总和最大. 输 ...

  8. Vj程序设计作业H8

    A : 元音回文 问题描述 现在有一个长度为 n 的字符串,都有小写字母组成. 现在所有元音字母都可以看作相同的字符 输出最长回文子串的长度 一个与自身的逆序相同的字符串即为回文串 比如 aba,aa ...

  9. 面向对象程序设计作业 6.1~6.4

    面向对象程序设计作业 6.1-6.4 面对对象基础题三道.继承多态一道. #include <iostream> #include <string> #include < ...

最新文章

  1. 报告:最大化人工智能(AI)机遇
  2. [WC2018]通道
  3. 在 asp.net core \ vs2015 update2 情况况下创建 asp.net core web application 的问题
  4. 错误1083:配置成在该可执行程序中运行的这个服务不能执行该服务 【解决办法】...
  5. python如何使用字典中的值并进行比较_比较字典python中的值
  6. 国产企业级服务器操作系统排名,国产操作系统那个最好排名
  7. 普元EOS7.5生成RestFul接口服务
  8. response下载zip文件
  9. 龙芯3a4000 交叉编译链接错误
  10. 那些年,我们一起卸载过的软件…
  11. Pandas:分组级的运算和转换--transform和apply
  12. FITC-TAT-Smad7-HA融合蛋白,荧光素标记TAT-Smad7-HA融合蛋白
  13. GeoServer学习笔记-2、基本使用(发布shapefile文件)
  14. 【Python】初学者也可以实现的人脸识别系统-0x1
  15. android 4.2目录结构,关于android的4.2的0文件夹的详解(目录结构挂载分析)
  16. 解决:Clipping input data to the valid range for imshow with RGB data
  17. 什么是放大器和宽带放大器及其性能概述
  18. MongoDB 可视化工具 Robomongo 使用介绍
  19. Cooperative Vehicular Content Distribution in Edge Computing Assisted 5G-VANET(5G车联网边缘计算数据开发)
  20. 15个产品经理问题,面试经常被问到!

热门文章

  1. 短信CMPP通信协议
  2. JsonRpc源码--处理http请求源码刨析
  3. 直击传统企业4大痛点 创新思维或能逆风翻盘!
  4. 年轻小伙竟用python爬取B站视频评论!
  5. 再分享本工作流的书《流程的永恒之道》
  6. 布线问题 队列式分支算法
  7. 使用Arduino制作自动车测速
  8. js 四舍五入方法,重写js四舍五入方法
  9. java 接入水晶报表实现代码自定义数据源(新手接触水晶报表)
  10. php验证码显示乱码,php 验证码乱码怎么办