Codeforces Round #427 (Div. 2) (solve 5 / 6)

来源:互联网 发布:08年西部决赛科比数据 编辑:程序博客网 时间:2024/06/05 13:30

这次做了3个题,涨分了。C题能过是侥幸。补到了5题,E题还有点蒙,清晰了再写。

A. Key races【水题】

题意:

1.有两个人,每人打 s 个字符。
2.打字前用 t 时间,每打一个字符用 v 时间,打字后用 t 时间。
3.给你两个人的 vt,求谁用时少。

思路:

sum=2×t+v×s,带入 v,t 看谁用时少。

代码:

#include <bits/stdc++.h>  using namespace std;  typedef long long LL;  typedef pair<int,int>pii;  const int INF = 0x3f3f3f3f;  int main() {      int s, v1, v2, t1, t2;      cin >> s >> v1 >> v2 >> t1 >> t2;      int sum1 = s * v1 + 2 * t1;      int sum2 = s * v2 + 2 * t2;      if(sum1 < sum2) {          puts("First");      } else if(sum1 > sum2) {          puts("Second");      } else {          puts("Friendship");      }      return 0;  }  

B. The number on the board【简单贪心】

题意:

1.给你一串数字。
2.问你最少改动几位数字,使得这一串数字的每一位累计值不少于K。
3.题目保证有解。

思路:

给字符串按字典序从小到大排序,使得每次改变量最大。如果当前sum值小于k,则将当前位改为数字9。

代码:

#include <bits/stdc++.h>using namespace std;typedef long long LL;typedef pair<int,int>pii;const int INF = 0x3f3f3f3f;string s;int main() {    int k;    cin >> k >> s;    int sum = 0;    for(int i = 0; i < s.size(); ++ i) sum += s[i] - '0';    sort(s.begin(), s.end());    int ans = 0;    for(int i = 0; i < s.size(); ++ i) {        if(sum >= k) break;        sum += (9 - (s[i] - '0'));        ans++;    }    cout << ans << endl;    return 0;}

C. Star sky【模拟、二维前缀和】

戳上面链接直达BLOG

D.Palindromic characteristics【DP、后缀和】

戳上面链接直达BLOG

原创粉丝点击