每个标题都做了题目原网址的超链接


Day11《Given Length and Sum of Digits...

题意:

给定一个数 m 和 一个长度 s,计算最大和最小在 s 长度下,各位数字之和为 m 的值

如果无法生成,则输出两个-1

题解:

需要注意:在输出最大值时,判一下 k 是否为 0

上板子:

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. int main()
  5. {
  6. int len, sum; cin >> len >> sum;
  7. if (sum == 0 && len != 1 || sum > len * 9)
  8. cout << -1 << ' ' << -1 << endl;
  9. else
  10. {
  11. for (int i = len - 1, k = sum; i >= 0; --i)
  12. {
  13. int x = max(0, k - 9 * i);
  14. if (!x && i == len - 1 && k)x = 1;
  15. cout << x; k -= x;
  16. }
  17. cout << ' ';
  18. for (int i = len - 1, k = sum; i >= 0; --i)
  19. {
  20. int x = min(9, k);
  21. cout << x;
  22. k -= x;
  23. }
  24. }
  25. return 0;
  26. }

Day12《Cheap Travel

题意:

一个 ride 需要 a 卢布,m 个 ride 需要 b 卢布,这两种方案都可以无限制地采用,要完成 n rides 最少需要多少卢布

注:由样例可知,不一定要刚好完成 n rides,可以完成 cnt rides(cnt > n)

题解:

本题我采用的分类讨论:

  1. 当 n <= m  时,一张多程票 b 就可以完成 n rides,故需要比较 a*n 和 b 的大小
  2. 当 n > m 时,比较 a 和 b/m 的价格(b/m 即为 m rides 中的单程价)

上板子:

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. int main()
  5. {
  6. int n, m;
  7. double a, b;
  8. while (scanf("%d%d%lf%lf", &n, &m, &a, &b) != EOF)
  9. {
  10. int ans;
  11. if (n <= m) ans = (a * n > b ? b : a * n);
  12. else if (a >= b / m)//单程a的价格比买多程b的平均单程价格b/m高
  13. {
  14. ans = n / m * b;//尽可能购买b
  15. ans += min(n % m * a, b);
  16. }
  17. else ans = n * a;
  18. printf("%d\n", ans);
  19. }
  20. return 0;
  21. }

Day13《BerSU Ball

题意:

给出两个数组,两个元素的差小于等于 1 时才能配对,问两组之间进行配对,求最多对数。

题解:

暴力出奇迹

上板子:

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. int main()
  5. {
  6. vector<int>g;
  7. vector<int>b;
  8. int n, m, i, c, j, k = 0, num = 0;
  9. cin >> n;
  10. for (i = 0;i < n;i++)
  11. {
  12. cin >> c;
  13. b.push_back(c);
  14. }
  15. cin >> m;
  16. for (i = 0;i < m;i++)
  17. {
  18. cin >> c;
  19. g.push_back(c);
  20. }
  21. sort(g.begin(), g.end());
  22. sort(b.begin(), b.end());
  23. for (i = 0;i < n;i++)
  24. {
  25. for (j = k;j < m;j++)
  26. {
  27. if (abs(b.at(i) - g.at(j)) <= 1)
  28. {
  29. num++;
  30. k = j + 1;
  31. break;
  32. }
  33. }
  34. }
  35. cout << num << '\n';
  36. return 0;
  37. }

Day14《Pashmak and Flowers

题意:

给出一个数组,要找一个最大值一个最小值,求最大值和最小值的差以及可以有多少种组合

题解:

  1. 输入数组,用 sort 排序
  2. 循环,记录最大值的个数,最小值的个数,差值
  3. 如果差值为 0,则可以有 n*(n-1)/2 种组合
  4. 如果不为 0,则将最大值个数和最小值个数相乘输出

坑:记得开 long long !

上板子:

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. const int MAX = 200005;
  5. int a[MAX];
  6.  
  7. int main()
  8. {
  9. int n;
  10. cin >> n;
  11. for (int i = 0;i < n;i++)
  12. cin >> a[i];
  13. sort(a, a + n);
  14. long long int cnt = 0;
  15. int ans = a[n - 1] - a[0];
  16. if (ans == 0)
  17. {
  18. cnt = (long long)(n - 1) * n / 2;
  19. }
  20. else
  21. {
  22. int m1 = 0, m2 = 0;
  23. for (int i = 0;i < n;i++)
  24. {
  25. if (a[i] == a[0])m1++;
  26. else break;
  27. }
  28. for (int i = n-1;i >=0;i--)
  29. {
  30. if (a[i] == a[n-1])m2++;
  31. else break;
  32. }
  33. cnt = (long long)m1 * m2;
  34. }
  35. cout << ans << " " << cnt << endl;
  36. return 0;
  37. }

Day15《Two Substrings

题意:

给一个字符串,找"AB"和"BA"。

注意:"AB"和"BA"不能重合

题解:

  1. //strstr()函数用法
  2.  
  3. char str[]= "1234xyz" ;
  4. char *str1= strstr (str, "34" );
  5. cout << str1 << endl;

strstr() 函数搜索一个字符串在另一个字符串中的第一次出现。 该函数返回字符串的其余部分(从匹配点)。如果未找到所搜索的字符串,则返回 false。

上板子:

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. char s[100001];
  5. int main()
  6. {
  7. char* c;
  8. scanf("%s", &s);
  9. if ((c = strstr(s, "AB")) != NULL && strstr(c + 2, "BA") != NULL)
  10. cout << "YES\n";
  11. else if ((c = strstr(s, "BA")) != NULL && strstr(c + 2, "AB") != NULL)
  12. cout << "YES\n";
  13. else cout << "NO\n";
  14. return 0;
  15. }

Day16《Random Teams

题意:

n个人,m个队,在同一个队的人可以两两成为朋友,问朋友的对数的最大值和最小值为多少。

题解:

  • 最大值的分法是有 n-1 个队中只放一个人, 把剩下的人全放同一个队。
  • 最少的分法是尽可能的均分 n 个人到 m 个队。
  • k个人两两之间的朋友对数为  k*(k-1)/2

坑:记得开 long long !

上板子:

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. int main()
  5. {
  6. ll m, n, min, max, a, b;
  7. cin >> n >> m;
  8. max = (n - m + 1) * (n - m) / 2;
  9. a = n % m;
  10. b = n / m;
  11. min = (m * b * b - m * b + 2 * a * b) / 2;
  12. printf("%lld %lld\n", min, max);
  13. return 0;
  14. }

Day17《Cobb

题意:

数组an,以及一个整数 k。 找到最大值 i * j − k ⋅ ( ai | aj ) i * j − k * ( ai | aj )

题解:暴力循环

  • 注意减少一下循环次数,由于下标 i * j 一定大于0,故在 n 较大的时候可以不考虑下标较小的数

对于样例:

3 3
1 1 3

  • f(1,2)=1⋅2−k⋅(a1|a2)=2−3⋅(1|1)=−1f(1,2)=1⋅2−k⋅(a1|a2)=2−3⋅(1|1)=−1.
  • f(1,3)=1⋅3−k⋅(a1|a3)=3−3⋅(1|3)=−6f(1,3)=1⋅3−k⋅(a1|a3)=3−3⋅(1|3)=−6.
  • f(2,3)=2⋅3−k⋅(a2|a3)=6−3⋅(1|3)=−3f(2,3)=2⋅3−k⋅(a2|a3)=6−3⋅(1|3)=−3.
  • 最大值为f(1,2)=−1f(1,2)=−1.

记得开 long long !

上板子:

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. int t, n, k, a[100005];
  5. int main()
  6. {
  7. cin >> t;
  8. while (t--)
  9. {
  10. cin >> n >> k;
  11. for (int i = 1; i <= n; i++)
  12. {
  13. cin >> a[i];
  14. }
  15. ll ans = -100000000;
  16. for (int i = max(1, n - 200); i <= n; i++)
  17. {
  18. for (int j = i + 1; j <= n; j++)
  19. {
  20. ans = max(ans, ((ll)i) * j - (a[i] | a[j]) * k);
  21. }
  22. }
  23. cout << ans << endl;
  24. }
  25. return 0;
  26. }

Day18《Same Parity Summands

题意:

给定和n与数字个数k,问能否有k个偶数/奇数之和为n

题解:

  1. 若为 k 个奇数,需满足:n-(k-1) 的差为奇数
  2. 同理,若为 k 个偶数,需满足: n-(k-1)*2 的差为偶数
  3. 如果两个都不行,那么就是NO

上板子:

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. int a[1000 + 10];
  5. int b[1000 + 10];
  6. int main()
  7. {
  8. int t;
  9. cin >> t;
  10. while (t--) {
  11. int n, k;
  12. cin >> n >> k;
  13. int num = n - (k - 1);
  14. if (num > 0 && num % 2 != 0) {
  15. cout << "YES" << endl;
  16. for (int i = 1; i <= k - 1; i++) cout << "1 ";
  17. cout << num << endl;
  18. continue;
  19. }
  20. num = n - (k - 1) * 2;
  21. if (num > 0 && num % 2 == 0) {
  22. cout << "YES" << endl;
  23. for (int i = 1; i <= k - 1; i++) cout << "2 ";
  24. cout << num << endl;
  25. continue;
  26. }
  27. cout << "NO" << endl;
  28. }
  29. return 0;
  30. }

Day19《Pashmak and Garden

题意:

给出两个点 (x1,y1),(x2,y2) 问能不能构成正方形,能则输出另外两点。不能则输出 -1。

题解:

  1. 计算 x2-x1,y2-y1(取绝对值)
  2. 若有一个值为零,那么说明这两个点在同一条(与 x/y 轴平行的)直线上
  3. 若两个值都不为零,那么需要两个值相等(两个值代表了两条边长)
  4. 如果两种情况都不满足,那么输出 "-1"

因为题目很水,所以这题没有注释

上板子:

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. int main() {
  5. int x1, y1, x2, y2;
  6. cin >> x1 >> y1 >> x2 >> y2;
  7. int lenx = abs(x1 - x2);
  8. int leny = abs(y1 - y2);
  9.  
  10. if (lenx && leny && lenx != leny) printf("-1\n");
  11. else if (!lenx) printf("%d %d %d %d\n", (x1 + leny), y1, (x1 + leny), y2);
  12. else if (!leny) printf("%d %d %d %d\n", x1, y1 + lenx, x2, y1 + lenx);
  13. else printf("%d %d %d %d\n", x2, y1, x1, y2);
  14. return 0;
  15. }

Day20《K-th Beautiful String

题意:

打印一个长度为 n 的字符串,原始字符串为 n-2 个 a 和最后两个 b (设 n = 4,则 str == aabb ),然后打印这个字符串第 m 个字典排序的字符串。

题解:

  1. 考虑用前缀和加二分查找找区间,太麻烦
  2. 至于规律:第一个b的位数对应m的数,找这方面的规律
  3. 有个坑,要开longlong

上板子:

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. #define mod 998244353
  5. const int MAX = 1e5 + 10;
  6. int main(void)
  7. {
  8. int T;
  9. cin >> T;
  10. while (T--)
  11. {
  12. int n, m;
  13. ll x, y;
  14. cin >> n >> m;
  15. for (ll i = 1; i <= MAX; i++)
  16. {
  17. if (m <= i * (i - 1) / 2)
  18. {
  19. x = i - 1;
  20. break;
  21. }
  22. }
  23. y = m - (x * (x - 1)) / 2;
  24. string str(n, 'a');//建立一个全为'a'的字符串
  25. str[n - x - 1] = 'b';
  26. str[n - y] = 'b';
  27. cout << str << endl;
  28. }
  29. return 0;
  30. }

[codeforces] 暑期训练之打卡题(二)的更多相关文章

  1. [codeforces] 暑期训练之打卡题(一)

    每个标题都做了题目原网址的超链接 Day1<Vanya and Lanterns> 题意: 一条长度为 l 的街道,在这条街道上放置了n个相同的灯,街道一端位置记为0,每个灯的位置在ai处 ...

  2. [codeforces] 暑期训练之打卡题(三)

    每个标题都做了题目原网址的超链接 Day21<Alphabetic Removals> 题意: 给定一个字符串,要求按照字典序按照出现的前后顺序删除 k 个字母 题解: 记录字符串中各个字 ...

  3. [小结] 中山纪念中学2018暑期训练小结(划掉)(颓废记)-Day10

    [小结] 中山纪念中学2018暑期训练小结(划掉)(颓废记)-Day10 各位看众朋友们,你们好,今天是2018年08月14日,星期二,农历七月初四,欢迎阅看今天的颓废联编节目 最近发生的灵异事件有 ...

  4. Noip2019暑期训练2 反思

    经过两次测试,通过深刻的反思,我主要发现了以下易犯错误: 1.做题目时过于追求速度,导致好几处代码都出现手误打错的现象!而且,千万不要图快.图方便就复制粘贴,非常容易出错!(例如T3-party中直接 ...

  5. Codeforces Round #378 (Div. 2) D题(data structure)解题报告

    题目地址 先简单的总结一下这次CF,前两道题非常的水,可是第一题又是因为自己想的不够周到而被Hack了一次(或许也应该感谢这个hack我的人,使我没有最后在赛后测试中WA).做到C题时看到题目情况非常 ...

  6. Codeforces Round #612 (Div. 2) 前四题题解

    这场比赛的出题人挺有意思,全部magic成了青色. 还有题目中的图片特别有趣. 晚上没打,开virtual contest打的,就会前三道,我太菜了. 最后看着题解补了第四道. 比赛传送门 A. An ...

  7. 算法训练 Hankson的趣味题

    算法训练 Hankson的趣味题   时间限制:1.0s   内存限制:64.0MB        问题描述 Hanks 博士是BT (Bio-Tech,生物技术) 领域的知名专家,他的儿子名叫Han ...

  8. Codeforces 828B Black Square(简单题)

    Codeforces 828B Black Square(简单题) Description Polycarp has a checkered sheet of paper of size n × m. ...

  9. http://codeforces.com/gym/100623/attachments E题

    http://codeforces.com/gym/100623/attachments E题第一个优化它虽然是镜像对称,但它毕竟是一一对称的,所以可以匹配串和模式串都从头到尾颠倒一下第二个优化,与次 ...

随机推荐

  1. git提交错误 git config --global user.email “you@example.com“ git config --global user.name “Your Name

    1 Commit failed - exit code 128 received, with output: '*** Please tell me who you are. 2 3 Run 4 5 ...

  2. html和css常见的一些问题总结

    html 标签 一般在html有块级元素和行级元素,主要的块级元素有 div,p,h1-h6,ul,ol,li,dl,dt,dd,table,tr,th,td,有好记的办法,div,p,显示标题的,列 ...

  3. mysql基本操作1

    数据库的分类 --1.关系型数据库-----用"表"保存数据,相关数据存入一张表中   --2.非关系型数据库-----键值数据库-----对象数据库 ###主流关系型数据库-Or ...

  4. 记一次dotnet拆分包,并希望得大佬指点

    记一次dotnet拆分包,并希望得大佬指点 之前做了一个用于excel导入导出的包, 定义了一些接口, 然后基于 NPOI EPPlus MiniExcel 做了三种实现 接口大概长下面这样(现在可以 ...

  5. MFC---文档与视图结构

    文档与视图结构 文档.视图的关系,是一对多的映射,一个文档可以对应多个视图,而一个视图只能对应一个文档.例如,一个.html文件,可以用记事本打开,也可以用浏览器打开,这里的.html文件就是文档,记 ...

  6. SpringMVC获取请求参数-基本类型

    1.Controller中的业务方法的参数名称要与请求参数的name一致,参数值会自动映射匹配 (json形式) <dependency> <groupId>com.faste ...

  7. maven jar包冲突问题

    之前好端端的项目没做任何改动maven依赖就报红?jar包冲突?不要慌,问题不大. idea file里面点击invalidate Caches/Restart清空项目缓存并重启,ok解决问题.

  8. TCP/IP 协议标准简单描述

    TCP/IP 协议标准简单描述 说明 分为三部分:中文名称.缩写.说明. 应用层 DNS 域名服务 (DNS) 功能: 将域名转化为IP地址 BOOTP 引导程序协议 (BOOTP) 功能: 允许无盘 ...

  9. OSPF 路由协议详解(一)

    (文章目录) ospf 协议是网络层协议 此篇文章适合有一定网络基础的人 ospf 协议最多应用在企业网络中,针对于运营商网络并不是特别的适用,端口号为 89 通过 IP 进行数据的转发 ospf 基 ...

  10. 简易table form梳理

    <!--      A:表格-table    <双标签,day3上午第一次接触>         作用:显示信息     一:table简易案例:         <tabl ...