A. Chewbaсca and Number

感觉这道题巨坑,如果题中加粗标出来的输出得是正数算小坑的话。有个巨坑就是

the final number shouldn't start with a zero.

答案不能有前导0,我觉得这句话有两种理解:

比如将9999变为9,算不算有前导0呢?把9当做一位数就没有前导0,当做4位数就有前导0

好吧,根据“剧情需要”,看来是被当做有前导0的

所以,这道题的解法就是除了最高位如果是9的话,把其他所有大于等于5的数字t,全部转变为9-t

 1 #include <bits/stdc++.h>
 2
 3 using namespace std;
 4
 5 const int maxn = 25;
 6 char s[maxn];
 7
 8 int main()
 9 {
10     scanf("%s", s);
11     int l = strlen(s);
12     for(int i = 0; i < l; ++i)
13     {
14         if(i == 0 && s[i] == '9') continue;
15         if(s[i] > '4') s[i] = '0' + '9' - s[i];
16     }
17     printf("%s\n", s);
18
19     return 0;
20 }

代码君

B. Han Solo and Lazer Gun

题意:

可能是A题弄得心里比较乱,所以这个题在思路清晰的情况下还WA了两次,真是。。

有一把枪和n个敌人,这把枪一次能消灭经过枪的位置的直线上所有敌人。

已知枪和敌人的坐标,求要消灭所有敌人的最少开枪次数。

分析:

以枪为中心,如果某两个敌人和枪连线斜率一样的话,一次就能全部消灭。

因为浮点运算肯定会有误差,所以我们用两个互素的整数<x, y>(x≥0)来表示斜率。

注意敌人与枪处于同一水平线或竖直线的特殊情况。

 1 #include <bits/stdc++.h>
 2
 3 using namespace std;
 4
 5 const int maxn = 1000 + 10;
 6
 7 int gcd(int a, int b)
 8 { return b == 0 ? a : gcd(b, a % b); }
 9
10 int main()
11 {
12     //freopen("in.txt", "r", stdin);
13
14     int n, x0, y0, cnt = 0;
15     scanf("%d%d%d", &n, &x0, &y0);
16     set<pair<int, int>> Set;
17     for(int i = 0; i < n; ++i)
18     {
19         int x, y;
20         scanf("%d%d", &x, &y);
21         x -= x0; y -= y0;
22         pair<int, int> t;
23         if(x == 0) t = make_pair(0, 1);//处于同一竖直线
24         else if(y == 0) t = make_pair(1, 0);//处于同一水平线
25         else
26         {
27             int g = gcd(x, y);
28             x /= g; y /= g;
29             if(x < 0) { x = -x; y = -y; }
30             t = make_pair(x, y);
31         }
32         if(!Set.count(t)) { cnt++; Set.insert(t); }
33     }
34
35     printf("%d\n", cnt);
36
37     return 0;
38 }

代码君

C. Watto and Mechanism (哈希)

题意:

给出n个字符串,然后有m个询问,每个询问也都是一个字符串。

恰好改变询问中的字符串的一个字符,是否能变为n个字符串中的某个字符。

分析:

题中说所有的字符串只含abc三种字符,所以我们可以把每个字符串看做一个三进制的数字(abc代表012)。

因为可能会溢出,所以要不断取余。一开始是对1e9+7取余,但是没过,后来改成1e12+7

将这n个字符串对应的哈希值插入到set中,然后对于每个询问枚举改变的字符以及位置。

注意这里不要枚举新字符串然后计算哈希值,还是会超时的。应该在计算出询问串的哈希值的基础上再做相应改动。

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 typedef long long LL;
 4
 5 const LL MOD = 1000000000007LL;
 6
 7 inline LL Hash(string& s)
 8 {
 9     LL ans = 0;
10     for(int i = 0; i < s.length(); ++i)    ans = (ans*3+(s[i]-'a')) % MOD;
11     return ans;
12 }
13
14 int main()
15 {
16     //freopen("in.txt", "r", stdin);
17
18     int n, m;
19     scanf("%d%d", &n, &m);
20     set<LL> Set;
21     string s;
22     for(int i = 0; i < n; ++i)
23     {
24         cin >> s;
25         Set.insert(Hash(s));
26     }
27
28     for(int i = 0; i < m; ++i)
29     {
30         cin >> s;
31         bool flag = false;
32         LL x = Hash(s);//询问串的hash值
33         LL b = 1;
34         for(int j = s.length()-1; j >= 0; j--)
35         {
36             LL t = (x-b*(s[j]-'a'+1) % MOD + MOD) % MOD;//先将枚举的位置变为0
37             for(char c = 'a'; c <= 'c'; c++) if(c != s[j])
38             {
39                 LL tt = (t + b*(c-'a'+1)) % MOD;//新串对应的Hash值
40                 if(Set.count(tt)) { flag = true; break; }
41             }
42             if(flag) break;
43             b = (b*3) % MOD;//b = (3^i)%MOD
44         }
45
46         printf("%s\n", flag ? "YES" : "NO");
47     }
48
49     return 0;
50 }

代码君

转载于:https://www.cnblogs.com/AOQNRMGYXLMV/p/4295749.html

CodeForces Round #291 Div.2相关推荐

  1. hash+set Codeforces Round #291 (Div. 2) C. Watto and Mechanism

    题目传送门 1 /* 2 hash+set:首先把各个字符串的哈希值保存在set容器里,然后对于查询的每一个字符串的每一位进行枚举 3 用set的find函数查找是否存在替换后的字符串,理解后并不难. ...

  2. Codeforces Round #291 (Div. 2)

    A 简单题 B 简单题 C 求改变一个字母的单词是否出现过 字典树+dfs D k次射击 每次可以把一列都减小1 总共m列 m列都为0就被破坏掉 问最多连续多少个被破坏掉 二分答案 在用数据结构询问某 ...

  3. Codeforces Round #506 (Div. 3)

    Codeforces Round #506 (Div. 3) 实习期间事不多,对div3 面向题解和数据编程了一波 A. Many Equal Substrings 题目链接 A题就是找后缀和前缀重合 ...

  4. Codeforces Round #563 (Div. 2)/CF1174

    Codeforces Round #563 (Div. 2)/CF1174 CF1174A Ehab Fails to Be Thanos 其实就是要\(\sum\limits_{i=1}^n a_i ...

  5. 构造 Codeforces Round #302 (Div. 2) B Sea and Islands

    题目传送门 1 /* 2 题意:在n^n的海洋里是否有k块陆地 3 构造算法:按奇偶性来判断,k小于等于所有点数的一半,交叉输出L/S 4 输出完k个L后,之后全部输出S:) 5 5 10 的例子可以 ...

  6. Codeforces Round #696 (Div. 2) (A ~ E)超高质量题解(每日训练 Day.16 )

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Codeforces Round #696 (Div. 2) (A ~ E)超高质量题解 比赛链接:h ...

  7. Codeforces Round #712 Div.2(A ~ F) 超高质量题解(每日训练 Day.15 )

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Codeforces Round #712 Div.2(A ~ F) 题解 比赛链接:https:// ...

  8. Codeforces Round #701 (Div. 2) A ~ F ,6题全,超高质量良心题解【每日亿题】2021/2/13

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 A - Add and Divide B - Replace and Keep Sorted C ...

  9. Codeforces Round #700 (Div. 2) D2 Painting the Array II(最通俗易懂的贪心策略讲解)看不懂来打我 ~

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 整场比赛的A ~ E 6题全,全部题目超高质量题解链接: Codeforces Round #700 ...

最新文章

  1. nodejs端口被占用。
  2. 趋势科技全球首席安全官ED:人类迈向智能社会进程中不能失去掌控力
  3. 数据流DataInput(Output)Stream 和 字节数组流 ByteArrayInput(Output) Stream
  4. 十进制整数(包括负数)和二进制的转换
  5. GM6 pageset - DB get scenario
  6. POJ 2259 team queue团队排队问题
  7. MTCNN-tensorflow源码解析-gen_12net_data.py
  8. BN、LN、IN、GN和SN
  9. Nginx——Nginx实现服务端集群搭建
  10. 肠道重要菌属——嗜胆菌属 (Bilophila)喜欢脂肪、耐胆汁的促炎菌
  11. 【项目管理】测量绩效域管理
  12. 在Mac上阻止相机和麦克风的方法
  13. CSAPP Lab2
  14. 你的团队需要一个会讲故事的人
  15. 计算机操作系统计算题及答案(5),5计算机操作系统练习题及答案.doc
  16. require.js 介绍
  17. 学习amber教程A17:伞形采样,绘制丙氨酸三肽的势能面
  18. typora图片插入问题
  19. 数据结构 第一章 数据结构绪论
  20. 流程平台——如何严卡提测质量

热门文章

  1. rhel7安装vnc出现error: Failed dependencies:
  2. sqlserver 储存过程 批量更新_大白菜怎么储存过冬,好吃还不烂?掌握方法,其实很简单...
  3. Qt基于QGraphicsObject自定义图元并实现简单的动画
  4. 微信小程序怎么在wxml中插入多个图片_兰州小程序开发流程费用推荐品牌_便企网...
  5. matlab绘制立体图
  6. 拦截导弹(二分匹配)
  7. owasp十大漏洞_OWASP十大网络应用安全漏洞
  8. python 解析url上的xml_如何从python中的URL读取XML文件?
  9. poj3253 优先队列
  10. [C#] - 从 HTML 代码中 转换 / 提取 可读文字(PlainText)的方法