• Codeforces Round #334 (Div. 2)


    A. Uncowed Forces

    题目链接:http://www.codeforces.com/contest/604/problem/A

    题意:

    类似CF算分,总共5道题500,1000,1500,2000,2500。

    给出m1,m2,m3,m4,m5,w1,w2,w3,w4,w5。每道题根据 计算。再算上hack成功的和失败的。

    模拟题,注意精度。

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 double m1, m2, m3, m4, m5;
     4 double w1, w2, w3, w4, w5;
     5 double hs, hu;
     6 double fun(double x, double m, double w)
     7 {
     8     return max(x*0.3, (1-m/250)*x - 50*w);
     9 }
    10 int main() 
    11 {
    12   //  freopen("in.txt", "r", stdin);
    13   //freopen("out.txt", "w", stdout);
    14     while(~scanf("%lf%lf%lf%lf%lf", &m1, &m2, &m3, &m4, &m5))
    15     {
    16         scanf("%lf%lf%lf%lf%lf", &w1, &w2, &w3, &w4, &w5);
    17         scanf("%lf%lf", &hs, &hu);
    18         double sum = fun(500, m1, w1) + fun(1000, m2, w2) + fun(1500, m3, w3) + fun(2000, m4, w4) + fun(2500, m5, w5);
    19         sum += (hs*100 - hu*50);
    20         cout<<int(sum)<<endl;
    21     }
    22     return 0;
    23 }
    View Code

    B. More Cowbell

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

    题意:给出n和k,n表示物品数目,k表示盒子数目。每个盒子最多只可以放两个物品。

    给出每个物体的体积,求把物品都放进盒子后,最大的盒子的最小体积。

    思路:分类讨论,当k >= n时,就是每个物品一个盒子,那么答案就是最大的物品的体积。

    当k < n时,看有几个盒子需要装两个物品,大的先单个放,然后装两个的一大一小配。

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 int n, k;
     4 int s[100010];
     5 int main() 
     6 {
     7    // freopen("in.txt", "r", stdin);  
     8     while(~scanf("%d%d", &n, &k))
     9     {
    10         for(int i = 1; i <= n; i++) scanf("%d", &s[i]);
    11         if(k >= n) printf("%d
    ", s[n]);
    12         else if(k < n)
    13         {
    14             int cnt = n-k;  
    15             if(cnt == k)
    16             {
    17                 int mmax = s[n];
    18                 int l = 1, r = n;
    19                 while(l < r)
    20                 {
    21                      mmax = max(mmax,s[l] + s[r]);
    22                      l++; r--;
    23                 }
    24                 printf("%d
    ", mmax);
    25             }
    26             else
    27             {
    28                 int last = cnt*2;
    29                 int mmax = s[n];
    30                 int l = 1, r = last;
    31                 while(l < r)
    32                 {
    33                     mmax = max(mmax, s[l] + s[r]);
    34                     l++; r --;
    35                 }
    36                 printf("%d
    ", mmax);
    37             }
    38         }
    39     }
    40     return 0;
    41 }
    View Code

    C. Alternative Thinking

    题目链接:http://www.codeforces.com/contest/604/problem/C

    题意:给出一个01序列,选择一个区间,把这个区间的0都变成1,1都变成0,使非连续01交替序列最长。

    思路: 找规律。先统计下原来串中非连续01交替序列的长度。

        如果整个串只有1个连续两个相同字符出现 即类似:1001,那么结果只能比原来+1。

        否则可以比原来+2。

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 char s[100010];
     4 int n;
     5 int main() 
     6 {
     7   //  freopen("in.txt", "r", stdin);
     8    // freopen("out.txt", "w", stdout);
     9     while(~scanf("%d", &n))
    10     {
    11         scanf("%s", s);
    12         
    13         char mark = s[0];
    14         int cnt = 1; 
    15         int length = 1;
    16         int temp = 1;
    17         int cnt2 = 0;
    18         for(int i = 1; i < n; i++)
    19         {
    20             if(s[i] == mark) temp++; 
    21             else if(s[i] != mark)
    22             {
    23                 mark = s[i]; cnt++;
    24                 length = max(length, temp);
    25                 if(temp >= 2) cnt2++;
    26                 temp = 1; 
    27             }
    28         }
    29         if(temp >= 2) cnt2++;
    30         length = max(length, temp);
    31         
    32         if(length >= 3) cnt += 2;
    33         else if(length == 2 && cnt2 >= 2) cnt += 2;
    34         else if(length == 2 && cnt2 < 2) cnt += 1;
    35         printf("%d
    ", cnt);
    36     }
    37     return 0;
    38 }
    View Code

    E. Lieges of Legendre

    题目链接:http://www.codeforces.com/contest/604/problem/E

    题意:Kevin and Nicky要玩一个游戏。有N堆奶牛。

    现在有2种操作:

    1.从一堆奶牛(数量>=1)中拿走一头

    2.把一堆2*x数量的奶牛边成k堆奶牛,每堆数量为x。

    两个人轮流操作,只能从1或2中选一种方法,取走最后一头奶牛的人胜利。

    思路:

    SG函数。

    因为游戏的每一步可以抽象成先挑选一个子游戏,选择一堆,然后对这堆操作,所以整个游戏可以看作每堆的和。

    在k是偶数的情况下:

    那么选择操作2,显然异或偶数次还是0。

    g(0) = 0

    状态1的后继态只有0,所以g(1) = 1。

    状态2可以选择操作1或操作2 g(2) = 2。

    状态3可以选择操作1变成状态2,所以g(1) = 0。

    状态4可以选择操作1或操作2 g(4) = 1。

    .....

    所以n >= 2时,如果是奇数,只能选择操作1 g(n) = 0;如果是偶数,可以选择操作1和2 g(n) = 1。

    在k是奇数的情况下:

    g(0) = 0,状态1的后继态只有0,g(1) = 1。同理g(2) = 0 g(3) = 1 g(4) = 2....

    在n >= 4的情况下,如果n是奇数,只能选择操作1 g(n) = 0

    如果是偶数,递归求解。

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 int n, k;
     4 int odd(int n) 
     5 {
     6     if(n == 1) return 1;
     7     if(n == 2) return 0;
     8     if(n == 3) return 1;
     9     if(n == 4) return 2;
    10     if(n%2) return 0;
    11     else return odd(n/2) == 1 ? 2:1; 
    12 }
    13 int even(int n)
    14 {
    15     if(n == 1) return 1;
    16     if(n == 2) return 2;
    17     if(n%2) return  0;
    18     else return 1;
    19 }
    20 int main() 
    21 {
    22   //  freopen("in.txt", "r", stdin);
    23   //  freopen("out.txt", "w", stdout);
    24     while(~scanf("%d%d", &n, &k))
    25     {
    26         int ans = 0;
    27         for(int i = 1; i <= n; i++)
    28         {
    29             int a; scanf("%d", &a);
    30             ans ^= (k%2==0)?even(a):odd(a); 
    31         }
    32         if(ans) printf("Kevin
    ");
    33         else printf("Nicky
    ");
    34     }
    35     return 0;
    36 }
    View Code
  • 相关阅读:
    django 定时任务 django-crontab 的使用
    Django中更新多个对象数据与删除对象的方法
    Django复制记录的方法
    Python中关于日期的计算总结
    django中添加日志功能
    Python 日期时间datetime 加一天,减一天,加减一小时一分钟,加减一年
    根据后端传的时间前端js进行倒计时
    输入pip命令报错:from pip import main ImportError: cannot import name 'main'
    操作uwsgi命令
    关于linux下安装mysqlclient报 Failed building wheel for mysqlclient问题
  • 原文地址:https://www.cnblogs.com/titicia/p/5034058.html
Copyright © 2020-2023  润新知