Codeforces Round #482 (Div. 2) :B - Treasure Hunt

题目链接:http://codeforces.com/contest/979/problem/B

解题心得:

  • 这个题题意就是三个人玩游戏,每个人都有一个相同长度的字符串,一共有n轮游戏,每一轮三个人必须改变自己字符串中的一个字母,最后得分就是字符串中出现字符最多的字母的次数。
  • 感觉这个题从题目描述到做法都像一个脑筋急转弯。主要明白一点,如果一个数要变回自己要怎么变。自己->其他->自己。自己->其他->其他->自己,推几个特例很容易就出来了。

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 const int maxn = 1e5+100;
 4 struct Person{
 5     string name;
 6     int Max;
 7     vector <int> ve;
 8 }p[4];
 9
10 int change_times,len;
11 void init() {
12     map <char, int> maps;
13     for(int i=‘a‘, j=‘A‘;i<=‘z‘&&j<=‘Z‘;i++,j++) {
14         maps[i] = 0;
15         maps[j] = 0;
16     }
17     char ri[maxn];
18     p[0].name = "Kuro";
19     p[1].name = "Shiro";
20     p[2].name = "Katie";
21     scanf("%d",&change_times);
22     map <char, int> :: iterator iter;
23     for(int i=0;i<3;i++) {
24         maps.clear();
25         scanf("%s",ri);
26         len = strlen(ri);
27         for(int j=0;j<len;j++)
28             maps[ri[j]]++;
29         for(iter=maps.begin();iter!=maps.end();iter++){
30             p[i].ve.push_back(iter->second);
31         }
32         for(int k=‘a‘, j=‘A‘;k<=‘z‘&&j<=‘Z‘;k++,j++) {
33             if(maps[k] == 0 || maps[j] == 0)
34                 p[i].ve.push_back(0);
35         }
36     }
37 }
38
39 bool cmp(Person a, Person b) {
40     return a.Max > b.Max;
41 }
42
43 void solve() {
44     for(int i=0;i<3;i++) {
45         for(int j=0;j<p[i].ve.size();j++) {
46             int k = p[i].ve[j];
47             if(k == len && change_times == 1) {
48                 p[i].Max = len -1;
49                 break;
50             }
51             int ch = len - k;
52             if(change_times < ch) {
53                 p[i].Max = max(p[i].Max, k+change_times);
54             } else {
55                 p[i].Max = len;
56             }
57         }
58     }
59     sort(p, p+3, cmp);
60     if(p[0].Max == p[1].Max)
61         printf("Draw");
62     else
63         cout<<p[0].name<<endl;
64 }
65
66 int main() {
67     init();
68     solve();
69     return 0;
70 }

原文地址:https://www.cnblogs.com/GoldenFingers/p/9281145.html

时间: 2024-11-08 16:18:07

Codeforces Round #482 (Div. 2) :B - Treasure Hunt的相关文章

Codeforces Round #482 (Div. 2)

A. Pizza, Pizza, Pizza!!! 注意:long long B. Treasure Hunt 注意:第五个样例(aaaaa,n==1)的情况要先处理一下. 感受:还是读题的问题,and the ribbon abcdabc has the beauty of 2 because its subribbon abc appears twice.(误导信息一),题目没要求是最大的连续子串.还有就是只能修改一个位置,记得给的单词是segment(一段同颜色的),后来题面好像改了. #

Codeforces Round #482 (Div. 2)D. Kuro and GCD and XOR and SUM+字典树

题目链接:D. Kuro and GCD and XOR and SUM 题意:两种操作:第一种给数组添加一个数,第二种输入x,k,s,要求从数组中找到一个数v,要求k能整除gcd(k,v);并且v<=s-x,然后异或v与k的异或值最大. 题解:对与k大于1的情况我们暴力枚举过去,k为1的特殊处理建一颗字典树,如果可以的满足条件的话,每次取值时往相反方向取. 1 #include<bits/stdc++.h> 2 #include <iostream> 3 #include

Codeforces Round #355 (Div. 2) Vanya and Treasure

这是一道很显然的DP题目,状态转移在题目中也很直接,就是从k-1到k,然而如果count[k-1]*cnt[k],那么时间复杂度就会很大,本来的复杂度应该是O(p*n*n*m*m),用DP的话会很TLE,看了大牛的解释后,是在p<sqrt(mn)时候用DP,之后如果p>sqrt(nm)的话就用BFS,这样用均摊分析可以计算其时间复杂度(后边我打算写一篇关于均摊分析的博文). #include <iostream> #include <cstdio> #include &

Codeforces Round #356 (Div. 2) [Codeforces680]

此处有目录↑ Codeforces Round #356(Div. 2):http://codeforces.com/contest/680 A. Bear and Five Cards (贪心) time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output A little bear Limak plays a game. He has

Codeforces Round #262 (Div. 2) 总结:二分

B. Little Dima and Equation 思路:本来前两题都很快做出来的,然后觉得ranting应该可以增加了.然后觉得代码没问题了,又想到了一组cha人的数据,然后就锁了,然后刚锁就被别人cha了看了代码才发现尼玛忘了判断小于10^9了,然后C反正想了好多种方法都不会就没心情了,就这样rating又降了 #pragma comment(linker, "/STACK:1024000000,1024000000") #include<iostream> #in

Codeforces Round #257 (Div. 2) E题:Jzzhu and Apples 模拟

E. Jzzhu and Apples time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output Jzzhu has picked n apples from his big apple tree. All the apples are numbered from 1 to n. Now he wants to sell them to

Codeforces Round #275 (Div. 1)A. Diverse Permutation 构造

Codeforces Round #275 (Div. 1)A. Diverse Permutation Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/482/problem/A Description Permutation p is an ordered set of integers p1,   p2,   ...,   pn, consisting of n distinct posi

Codeforces Round #428 (Div. 2)

Codeforces Round #428 (Div. 2) A    看懂题目意思就知道做了 #include<bits/stdc++.h> using namespace std; #pragma comment(linker, "/STACK:102400000,102400000") #define rep(i,a,b) for (int i=a; i<=b; ++i) #define per(i,b,a) for (int i=b; i>=a; --i

Codeforces Round #424 (Div. 2) D. Office Keys(dp)

题目链接:Codeforces Round #424 (Div. 2) D. Office Keys 题意: 在一条轴上有n个人,和m个钥匙,门在s位置. 现在每个人走单位距离需要单位时间. 每个钥匙只能被一个人拿. 求全部的人拿到钥匙并且走到门的最短时间. 题解: 显然没有交叉的情况,因为如果交叉的话可能不是最优解. 然后考虑dp[i][j]表示第i个人拿了第j把钥匙,然后 dp[i][j]=max(val(i,j),min(dp[i-1][i-1~j]))   val(i,j)表示第i个人拿