问题 A: 一道简单题

题目描述

ZYZ老师正在热情的准备着给大家发放的冰墩墩(是我雪容融不配了),在每一个包裹里都有一定数量的冰墩墩,现在ZYZ老师为了提前给大家发放,他想找到包裹中数量最多的那一个,但是准备发放时ZYZ老师想了想,感觉可能不太够,于是他就想从剩下的那些中再找到装有最多冰墩墩的包裹,即一共会发放两个包裹。现在ZYZ老师想知道,他一共可以提前发放多少数量的冰墩墩。

输入

第一行包括一个整数n(2 <= n <= 107),代表现有的包裹数量。

第二行包括n个整数,a1,a2,...an(1 <= ai <= 1018),代表每一个包裹中冰墩墩的数量。

输出

输出一个整数,代表ZYZ老师一共可以提前发放的冰墩墩的数量。

样例输入 Copy
32 1 3

样例输出 Copy
5
#include<bits/stdc++.h>
using namespace std;
#define ll long long
void work()
{ll n;scanf("%lld", &n);ll m1;ll m2;ll a;scanf("%lld", &a);m1 = a;scanf("%lld", &a);m2 = a;if (m1 < m2){ll t = m1;m1 = m2;m2 = t;}for (int i = 1; i <= n - 2; i++){scanf("%lld", &a);if (a > m1){m2 = m1;m1 = a;}else if (a > m2){m2 = a;}}cout << m1 + m2 << endl;
}
int main()
{work(); return 0;
}

问题 B: 传送站

题目描述

现宇宙中有两家转送站公司,小洛克想要从洛克星球a去往希望星球b。

我们把这些星球都简化到一条直线上,标号为1 - n,并且规定从星球i传送到星球j,如果其分别属于两家公司,那么他将花费|i - j|元,如果是同一家公司那么将没有任何费用,现在请你帮忙算一下其其前往希望星球至少需要多少元。

输入

第一行一个整数n(1 <= n <= 1000)。

第二行一个只含01的字符串。如果i位置上为0代表第i个星球使用第一家公司的传送站,为1代表其使用第二家公司的传送站。

第三行两个整数a , b(1 <= a,b <= n)代表出发地和目的地。

输出

输出一个整数,代表最小费用。

样例输入 Copy
8
00000001
1 8

样例输出 Copy
1
#include<bits/stdc++.h>
using namespace std;
#define ll long long
char s[1010];
void work()
{int n;cin >> n;cin >> s;int a, b;cin >> a >> b;if (s[a - 1] != s[b - 1])cout << 1 << endl;else cout << 0 << endl;
}
int main()
{work(); return 0;
}

问题 C: 收集魔卡

题目描述

小樱正在辛苦的收集魔卡,我们把每一个地点的魔卡简化到一条直线上,下标从1-n,小樱可以选择从某个地点开始往后连续的搜集(走到某格将代表拾取此处的魔卡),并且在某一地点停止而去战斗(走一格也可以),但是为了在战斗时拥有更多的选择,她想要至少搜集到k个正义的魔卡,同时要避免搜集到召唤恶灵的魔卡,现在小樱想要知道她一共可以有多少个搜集的方案。

输入

第一行输入两个正整数n(1 <= n <= 200000) 和 k(1 <= k <= 15),

第二行输入一行字符串,字符串仅包含大写字母(A到Z)。

E代表正义的魔卡,G代表召唤恶灵的魔卡。

输出

输出小樱的有效搜索的方案数。

样例输入 Copy
5 1
EAEGE

样例输出 Copy
6

提示
合法的方案:
s[1,1] = E
s[1,2] = EA
s[1,3] = EAE
s[2,3] = AE
s[3,3] = E
s[6,6] = E

一开始找了好长时间规律才AC了,后来队友告诉我可以暴力,我**,像个沙雕。

#include<bits/stdc++.h>
using namespace std;
#define ll long long
char s[200005];
ll res[200005];
ll cnt[200005];
struct node
{int w;
}q[200005];
void work()
{ll n, k;cin >> n >> k;cin >> s;ll len = strlen(s);ll ccnt = 0;ll ans = 0;if (s[0] == 'E'){res[0] = 1, cnt[0] = 0, q[ccnt++].w = 0;if (k == 1)ans++;}ll youxiao = 0;ll wuxiao = -1;for (ll i = 1; i < len; i++){if (s[i] == 'G')wuxiao = i, cnt[i] = 0, res[i] = 0, youxiao = i, ccnt = 0;else if (s[i] == 'E'){res[i] = res[i - 1] + 1;if (youxiao == wuxiao)youxiao = i;q[ccnt++].w = i;if (res[i] >= k)ans += q[ccnt - k].w - youxiao + 1;}else{res[i] = res[i - 1];if (youxiao == wuxiao)youxiao = i;if (res[i] >= k){ans += q[ccnt - k].w - youxiao + 1;}}}cout << ans << endl;
}
int main()
{work();return 0;
}

问题 D: 四六级成绩

题目描述

四六级成绩出来了,几家欢喜几家愁,裸考好几次的小明这次又没有过,他发誓要好好学习,决定从听力抓起(谁听听力呀)。
但他现在只能听学校放出的英语录音来进行练习,并且学校规定每50分钟播放一套英语录音,然后间隔10分钟停止播放,
我们假设从第一分钟开始播放第一个套录音,现在他想知道如果从t1分钟学习到t2分钟,他一共可以听多长时间的录音呢?

输入

第一行输入测试用例T,

每个测试用例输入两个整数t1,t2。

数据范围:

1<=T<=10,1<=t1<=t2<=1018 。

输出

如果小时数是整数,请输出:h小时

如果不是,请输出:h小时m分钟

样例输入 Copy

2
1 70
80 265

样例输出 Copy

1小时
2小时36分钟
#include<bits/stdc++.h>
using namespace std;
#define ll long long
int main()
{int t;cin >> t;while (t--){ll h = 0, m = 0;ll t1, t2;cin >> t1 >> t2;ll yu1 = t1 % 60;ll yu2 = t2 % 60;ll zheng1 = t1 / 60;ll zheng2 = t2 / 60;if (zheng2 > zheng1){m += yu1 > 50 ? 0 : (50 - yu1 + 1);m += 50 * (zheng2 - zheng1 - 1);m += yu2 > 50 ? 50 : yu2;}else{if (yu2 > 50){if (yu1 <= 50)m += 50 - yu1 + 1;}else m += yu2 - yu1 + 1;}h = m / 60;m %= 60;if (m == 0)printf("%lld小时\n", h);else printf("%lld小时%lld分钟\n", h, m);}return 0;
}

问题 E: 剪彩带

题目描述

小明和自己的一群伙伴去帮助老师剪裁彩带。

每个人发到手中的彩带的长度都不是完全相同的,每次小明会说,裁到x的位置,那么每个人都会从自己彩带1位置往后找到x的地方剪下然后上交给小明(即彩带x+1到 彩带末尾的这一段)。如果不够长小命就会接着再说出一个x大家照做。

其实小明只是想一共裁出总和至少长为m的彩带,但是每次比较太慢了,现在小明相向你请教,请你告诉小明让所有人从x处裁减就能获得长至少为m的彩带,并且保证x最大,也就是从x+1处的话就不够了。

输入

第一行两个整数n(1 <= n <= 106)和m(1 <= m <= 106),n代表裁剪彩带及裁剪人的个数,m代表彩带的总需求长度。

第二行n个整数代表每条彩带的长度(1 <= 彩带长度 <= 109)。

输出

输出一个整数代表最大的x的值

样例输入 Copy
4 7
20 15 10 17

样例输出 Copy
15

与C问题一样,写了一些需要思维的地方,结果队友告诉我暴力能过,,,,说多了都是泪

#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll a[1000006];
void work()
{ll n, m;cin >> n >> m;ll aans = 0;for (int i = 0; i < n; i++){cin >> a[i]; aans += a[i];}sort(a, a + n);ll ans = 0;ll res = 0;int f = 0;for (int i = n - 1; i >= 1; i--){res++;ans += (a[i] - a[i - 1])*res;if (ans > m){ans -= (a[i] - a[i - 1])*res;ll cnt = (m - ans) / res;if ((m - ans) % res)cnt++;cout << a[i] - cnt << endl;f = 1;break;}}if (!f){ll z = (aans - m) / n;if ((aans - m) % n)z++;cout << z << endl;}
}
int main()
{work(); return 0;
}

问题 I: 勇士之力

题目描述

勇士一斗为了拯救九条裟罗,他必须要穿越一片迷宫。一斗每次只能向东或者向南走,不能向西或者向北走。这个迷宫的入口位于西北角,而迷宫的出口位于东南角。

迷宫的每个道路交叉点都存在一个丘丘人,丘丘人的种类不同,他们的攻击力也不同。丘丘人的种类有很多种,列如可能会有木盾丘丘人,冰盾丘丘人,爆弹丘丘人,雷弹丘丘人,射手丘丘人,冰箭丘丘人,风丘丘萨满,草丘丘萨满,和一斗最讨厌的冰丘丘萨满等等多种丘丘人。我们会给出每种丘丘人的攻击力,并且用数字来代表位于迷宫道路交叉点的丘丘人是什么种类。

一斗有一个初始血量W,他每经过一个道路交叉点就会与位于哪里的丘丘人交战,虽然一斗有着斗战岩牛,但还是要不可避免的扣除一次丘丘人的攻击力大小的血量。请问一斗是否能在血量大于0的情况下在迷宫的出口处遇到九条裟罗,如果可以的话就输出剩余的最大血量,否则输出-1。

注意:起点西北角和出口东南角不存在丘丘人,也就是说值为0。

输入

第一行是两个整数n,m分别代表迷宫的行数和列数。

第二行是一斗的初始血量W。

第三行是丘丘人的种类数量k

第四行是k个丘丘人的攻击力x,以空格隔开。注意我们认为丘丘人的种类编号是1~k。0默认为没有丘丘人。

接下来是n行数据每行数据有m个数,从左向右顺序描述了每个道路交叉点的丘丘人种类y。

数据范围:

2<=n,m<=100

1<=W<=5000

1<=k<=15

1<=x<=200

1<=y<=k

输出

输出一斗到达迷宫出口时剩余的最大血量,如果小于等于0则输出-1.

样例输入 Copy
3 3
10
3
2 1 3
0 3 3
2 2 3
2 1 0

样例输出 Copy
6

一开始用dfs一直***超时过不去,后来用dp成功AC

#include<bits/stdc++.h>
using namespace std;
#define ll long long
int n, m;
int w;
int k;
int gj[20];
int dp[105][105];
int main()
{scanf("%d%d", &n, &m);scanf("%d", &w);scanf("%d", &k);for (int i = 1; i <= k; i++)scanf("%d", &gj[i]);for (int i = 1; i <= n; i++)for (int j = 1; j <= m; j++){scanf("%d", &dp[i][j]);int t = dp[i][j];dp[i][j] = gj[t];}for (int i = 2; i <= n; i++){dp[i][1] += dp[i - 1][1];}for (int i = 2; i <= m; i++){dp[1][i] += dp[1][i - 1];}for (int i = 2; i <= n; i++)for (int j = 2; j <= m; j++){dp[i][j] += min(dp[i - 1][j], dp[i][j - 1]);}int ans = w - dp[n][m];if (ans > 0)cout << ans << endl;else cout << -1 << endl;return 0;
}

ZZULI新生周赛(8)部分题题解相关推荐

  1. 计算机学院2022级新生周赛(一)题解

    更好的阅读体验\color{red}{更好的阅读体验}更好的阅读体验 另一篇题解\color{red}{另一篇题解}另一篇题解 文章目录 A. Hello , HAUE B. 我必须立刻签到,因为它有 ...

  2. zzuli 20级新生周赛(1)题解

    前言:涉及了字符串的题运用了string类,比char要方便很多,建议学习. 文章目录 A.藏头诗 B.画剑 C.商品总数 D. 小"光棍节" E.神秘的123 F.黄河大鲤鱼 G ...

  3. 河南工程学院2022级新生周赛(三)题解

    更好的阅读体验 \color{red}{更好的阅读体验} 更好的阅读体验 文章目录 A. 6男 B. 我要拿最多的Money2.0 C. 极致到完美的AK D. 吃豆人 E. 胡辣汤啊胡辣汤 F. H ...

  4. 河南理工大学新生挑战赛【部分题题解】

    目录 A: Dong Zhi[签到] B: The flower[简单 / 哈希表] D: LaunchPad[一般 / 差分] E: Morse code[思维] F: Puzzle[简单] A: ...

  5. LeetCode第287场周赛前四题题解(函数类二分的练习)

    - 本人的LeetCode账号:魔术师的徒弟,欢迎关注获取每日一题题解,快来一起刷题呀~ 本人Gitee账号:路由器,欢迎关注获取博客内容源码. 文章目录 1 转化时间需要的最小时间数 2 找出输掉零 ...

  6. 成都东软学院新生周赛(五)

    成都东软学院新生周赛(五) 感受 这次比赛打的非常艰辛,全程1.20小时的时间全在写A题,而且还没有写出来.还是自己太菜了.比赛过程中根本就没有想到用位运算去写着三个题. 考点 位运算:位运算是二进制 ...

  7. 2015浙江财经大学ACM有奖周赛(一) 题解报告

    2015浙江财经大学ACM有奖周赛(一) 题解报告 命题:丽丽&&黑鸡 这是命题者原话. 题目涉及的知识面比较广泛,有深度优先搜索.广度优先搜索.数学题.几何题.贪心算法.枚举.二进制 ...

  8. 小乐乐与二段数(2019哈理工新生赛第20题)

    链接:2019哈理工新生赛题解 2019哈理工新生赛第20题 T题: 链接:https://ac.nowcoder.com/acm/contest/1877/T 来源:牛客网 题目描述 小乐乐从老师口 ...

  9. 2020级HAUT新生周赛(四)@张承树专场

    文章目录 A:会写脚本的月月鸟 B:别看了 这是水题 C:ACM脱单大法 D:Love_Jacques学长的游戏思维 E:后缀自动机next指针dag图上跑SG函数 F:新建 Microsoft Po ...

最新文章

  1. 4岁的儿子还不会写红黑树,我该怎么办?
  2. mysql参数文件选项组_my.cnf文件关于组选项的总结
  3. Nginx之让用户通过用户名密码认证访问web站点
  4. shell:后台运行amp;,日志重定向输出,nohup,grep命令
  5. node mysql 多个_使用Node.js处理多个MySQL查询
  6. 对不起,你那不叫努力,叫重复劳动
  7. JavaOne 2012:向上,向上和向外:使用Akka扩展软件
  8. java自定义迭代器作用_Java实现的自定义迭代器功能示例
  9. 首次公开,用了三年的 pandas 速查表!
  10. 云图说|数据仓库服务 GaussDB(DWS) 的“千里眼、顺风耳”—数据库智能运维
  11. synchronized实现同步的原理和锁状态
  12. Vue:开发者友好性和易用性
  13. Zabbix学习(十七)zabbix low-level discover zabbix批量部署必备
  14. UIImageView只显示一半
  15. 腾讯云TCA运维工程师认证题库及例题示范
  16. gsoc 任务_我在GSoC'20中进行编码的第三周
  17. c语言 自锁按键,具有自锁功能的按键结构的制作方法
  18. Matlab 图片转gif
  19. 计算并返回x的平方根
  20. python建站的缺点_记录一下自己的建站过程(三):Python与Django

热门文章

  1. Redis示例配置文件
  2. 根据文章H标签自动生成导航目录
  3. 一只笈博士智能学习宝,勇敢开口说英语。
  4. Docker学习教程(非常详细)
  5. android 音乐播放器设计,基于Android音乐播放器设计的实现毕业论文.pdf
  6. python使用matplotlib制作画板和轴
  7. pay lip service to
  8. 开源监控软件Zabbix5部署实战
  9. ORA-00000 normal, successful completion 问题解决
  10. 从摩拜单车看懂不同物联网制式