比赛传送门


A. Shuffle Hashing

题意:加密字符串。可以把字符串的字母打乱后再从前面以及后面接上字符串。问加密后的字符串是否符合加密规则。

题解:字符串的长度很短,直接暴力搜索所有情况

  1. // https://codeforces.com/contest/1278/problem/A
  2. #include<iostream>
  3. #include<cstdio>
  4. #include<cstring>
  5. using namespace std;
  6. int T;
  7. char p[102], h[102];
  8. int pnum[30], hnum[30];
  9. int main()
  10. {
  11. scanf("%d", &T);
  12. while(T--){
  13. memset(pnum, 0, sizeof(pnum));
  14. // memset(hnum, 0, sizeof(hnum));
  15. scanf("%s %s", p, h);
  16. int plen = strlen(p); // 原字符串长度
  17. int hlen = strlen(h); // 加密后的长度
  18. for(int i = 0; i < plen; i++){
  19. pnum[p[i] - 'a']++; // 记录原字符串的字母个数
  20. }
  21. bool flag = false;
  22. for(int i = 0; i < hlen; i++){
  23. bool ok = true;
  24. memset(hnum, 0, sizeof(hnum)); // hnum 记录机密后的字符串字母的个数
  25. if(hlen - plen < i || flag) break;
  26. for(int j = 0, k = i; j < plen && k < hlen; j++, k++){
  27. int who = h[k] - 'a';
  28. hnum[h[k] - 'a']++;
  29. if(hnum[who] > pnum[who]) {
  30. ok = false;
  31. break;
  32. }
  33. }
  34. if(ok) flag = true;
  35. }
  36. if(flag) printf("YES\n");
  37. else printf("NO\n");
  38. }
  39. return 0;
  40. }


B. A and B

题意:第 \(i\) 步可以给A或者B加上 \(i\) ,求使得他们相等的最少步数

题解:数学题。先打表 f(i) = (i + 1) * i / 2;(f(1) < 1e9)。然后求 | A - B | ,当 f(x) >= |A - B| 时判断它们的差的奇偶性,如果是偶数则输出 x, 如果是奇数则分情况讨论:如果 x 为奇数,则输出 x+2;否则输出 x+1。

为什么呢?我们先把所有的数都加到较小的那个数(假设这里是a)里,当操作一轮后a的和比b要大,则说明此时需要把一部分a的操作数加到b那边去,其实b+i == a-i。此时 a + f(x) >= b 。 假如当 a + f(x) - b == 2 时,我们只需要把 a 当时的 +1 改为 -1 即可,所以操作数是没有变化的(如果是 == 4 则把 +2 改为 -2,以此类推)。而当 a + f(x) - b == k(k是奇数时), 且 x 此时是奇数时,则 a 加上下一个数的时候是加上一个偶数,偶数加奇数还是奇数,所以还要再操作一次;如果当前操作数是偶数时同理。a + f(x) - b 等价于 f(x) - (b - a) 分别对应 打表的f(i) 与 一开始两数的差。

  1. // https://codeforces.com/contest/1278/problem/B
  2. // Thanks for my gf.
  3. #include<iostream>
  4. #include<cstdio>
  5. #include<cmath>
  6. using namespace std;
  7. int T, a, b;
  8. int num[1000006];
  9. int cnt = 1;
  10. void build(){
  11. int x = 1, i = 1;
  12. while(x <= 1000000000){
  13. x = (i + 1) * i / 2;
  14. num[cnt++] = x;
  15. i++;
  16. }
  17. }
  18. int main()
  19. {
  20. build();
  21. scanf("%d", &T);
  22. while(T--){
  23. scanf("%d %d", &a, &b);
  24. int sub = abs(a - b);
  25. if(sub == 0) {
  26. printf("0\n");
  27. continue;
  28. }
  29. // printf("cnt:%d\n", cnt);
  30. for(int i = 1; i <= cnt; i++){
  31. if(num[i] >= sub){
  32. if((num[i]-sub) % 2 == 0) {
  33. printf("%d\n", i);
  34. break;
  35. }
  36. else {
  37. if(i % 2 == 0){
  38. printf("%d\n", i + 1);
  39. }
  40. else printf("%d\n", i + 2);
  41. break;
  42. }
  43. }
  44. }
  45. }
  46. return 0;
  47. }


C. Berry Jam

太难(cai)了我,看了很多题解才弄清楚了操作。下面直接贴博客吧。感谢大佬们的题解。因为代码跟大佬的相似,所以就不贴了

https://www.cnblogs.com/KisekiPurin2019/p/12074593.html

https://www.cnblogs.com/shoulinniao/p/12075697.html


记录菜鸟成长:



【cf比赛记录】Educational Codeforces Round 78 (Rated for Div. 2)的更多相关文章

  1. Educational Codeforces Round 78 (Rated for Div. 2) C. Berry Jam

    链接: https://codeforces.com/contest/1278/problem/C 题意: Karlsson has recently discovered a huge stock ...

  2. Educational Codeforces Round 78 (Rated for Div. 2)

    A题 给出n对串,求s1,是否为s2一段连续子串的重排,串长度只有100,从第一个字符开始枚举,sort之后比较一遍就可以了: char s1[200],s2[200],s3[200]; int ma ...

  3. Educational Codeforces Round 78 (Rated for Div. 2) --补题

    链接 直接用数组记录每个字母的个数即可 #include<bits/stdc++.h> using namespace std; int a[26] = {0}; int b[26] = ...

  4. Educational Codeforces Round 78 (Rated for Div. 2) D. Segment Tree

    链接: https://codeforces.com/contest/1278/problem/D 题意: As the name of the task implies, you are asked ...

  5. Educational Codeforces Round 78 (Rated for Div. 2) B. A and B

    链接: https://codeforces.com/contest/1278/problem/B 题意: You are given two integers a and b. You can pe ...

  6. Educational Codeforces Round 78 (Rated for Div. 2) A. Shuffle Hashing

    链接: https://codeforces.com/contest/1278/problem/A 题意: Polycarp has built his own web service. Being ...

  7. Educational Codeforces Round 78 (Rated for Div. 2)B. A and B(1~n的分配)

    题:https://codeforces.com/contest/1278/problem/B 思路:还是把1~n分配给俩个数,让他们最终相等 假设刚开始两个数字相等,然后一个数字向前走了abs(b- ...

  8. Educational Codeforces Round 78 (Rated for Div. 2) 题解

    Shuffle Hashing A and B Berry Jam Segment Tree Tests for problem D Cards Shuffle Hashing \[ Time Lim ...

  9. Educational Codeforces Round 78 (Rated for Div. 2) C - Berry Jam(前缀和)

随机推荐

  1. 奥展项目笔记01--不同网站,点击工具--开发人员工具F12,显示的页面怎么不一样

    开发人员工具F12,显示的页面不一样: 样式1: 样式2: 解决方案:兼容模式和极速模式的开发者工具不一样,改成极速模式就ok了.

  2. golang学习笔记 --flag

    概述 flag包提供了一系列解析命令行参数的功能接口 命令行语法 命令行语法主要有以下几种形式 -flag //只支持bool类型 -flag=x -flag x //只支持非bool类型 以上语法对 ...

  3. Java匹马行天下之JavaSE核心技术——注解

    Java注解 一.什么是注解 注解(Annotation)相当于一种标记,在程序中加入注解就等于为程序打上某种标记,没有加,则等于没有任何标记,以后,javac编译器.开发工具和其他程序可以通过反射来 ...

  4. Jmeter使用笔记1

    1.简介 jmeter 是一款专门用于功能测试和压力测试的轻量级测试开发平台.多数情况下是用作压力测试,该测试工具在阿里巴巴有着广泛的使用. 2.安装 下载apache-jmeter-3.1.rar; ...

  5. jdbc预编译实现方式

    jdbc预编译可以有两种方式: 方式一.jdbc自己实现的预编译,就是做一下特殊字符处理来防SQL注入,看PreparedStatement源码就可以了. public static void mai ...

  6. find、locate、whereis、which和type

    1. find $ find . -name '*' 2. locate 很快速的搜寻档案系统内是否有指定的档案,比find要快很多 其方法是先建立一个包括系统内所有档案名称及路径的资料库,之后当寻找 ...

  7. Excel 使用VBA或宏----简单笔记

    一.一种纯粹的录制宏.(未使用此方法,如有兴趣可自学),就是Excel提供了“所见即所得”的方式生成宏.把自己想要的操作记录,录制成宏. 自学网等各种网站有教学视频或文章 二.常用VBA语法及函数笔记 ...

  8. django rest_framework vue 实现用户登录

    django rest_framework vue 实现用户登录 后端代码就不介绍了,可以参考  django rest_framework 实现用户登录认证 这里介绍一下前端代码,和前后端的联调过程 ...

  9. java随机数获取

    /**Number One: * 随机数获取公式:(数据类型)(最小值+Math.random()*(最大值-最小值+1)) * 随机数获取公式:(类型)最小值+Math.random()*最大值 * ...

  10. 《Linux就该这么学》课程完结,强烈推荐

    本书是由全国多名红帽架构师(RHCA)基于最新Linux系统共同编写的高质量Linux技术自学教程,极其适合用于Linux技术入门教程或讲课辅助教材,目前是国内最值得去读的Linux教材,也是最有价值 ...