码迷,mamicode.com
首页 > 其他好文 > 详细

Codeforces Round #454 Div. 2 A B C (暂时)

时间:2017-12-24 11:12:12      阅读:110      评论:0      收藏:0      [点我收藏+]

标签:printf   return   吐槽   puts   inline   思路   codeforce   答案   size   

A. Masha and bears

题意

人的体积为\(V\),车的大小为\(size\),人能钻进车的条件是\(V\leq size\),人对车满意的条件是\(2V\geq size\).

现知道

  1. 熊爸爸能钻进最大的车并且满意
  2. 熊妈妈能钻进中等的车并且满意
  3. 熊宝宝能钻进最小的车并且满意
  4. Masha能钻进最小的车并且只对它满意

给定四人的体积(保证\(V1\gt V2\gt V3\)),要求给出三辆车的大小。

思路

考思维严谨性的题。// 还是有些怕的

假设三辆车大小分别为\(a,b,c\),则有
\[V1\leq a\leq 2V1 // 熊爸爸\V2\leq b\leq 2V2 // 熊妈妈\V3\leq c\leq 2V3 // 熊宝宝\V4\leq c\leq 2V4 // Masha\2V4\lt b //Masha只对最小的车满意 \]

要满足上述条件,只需将最大的车和中等的车都取到最大值,最小的车取交集(如果没有的话则为-1)中的最小的值,再判断最小的点是否满足最后一个条件即可,不满足则为-1。

Code

#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
int main() {
    int x1,x2,x3,x4;
    scanf("%d%d%d%d", &x1,&x2,&x3,&x4);
    int ans1 = 2*x1, ans2 = 2*x2, ans3;
    if (x3 == x4) ans3 = x3;
    else if (x3 > x4) {
        if (x3 <= 2 * x4) ans3 = x3;
        else ans3 = -1;
    }
    else {
        if (x4 <= 2 * x3) ans3 = x4;
        else ans3 = -1;
    }
    if (ans3==-1) puts("-1");
    else {
        if (2*x4<ans2) printf("%d\n%d\n%d\n", ans1,ans2,ans3);
        else puts("-1");
    }
    return 0;
}

B. Tic-Tac-Toe

水水的模拟...随便做...

顺带吐槽一波题面的英语水平...看样例猜题意...

Code

#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
char s[20][20], ss[20];
int main() {
    for (int i = 1; i <= 3; ++i) gets(s[i]+1);
    gets(ss);
    for (int i = 4; i <= 6; ++i) gets(s[i]+1);
    gets(ss);
    for (int i = 7; i <= 9; ++i) gets(s[i]+1);

    int a,b;
    scanf("%d%d", &a, &b);
    int px = (a-1) % 3 + 1, py = (b-1) % 3 + 1;
    int u = px*3-2, l = py*3-2+py-1;
    bool flag = false;
    for (int i = u; i < u+3; ++i) {
        for (int j = l; j < l+3; ++j) {
            if (s[i][j]==46) {
                flag = true, s[i][j] = 33;
            }
        }
    }
    if (!flag) {
        for (int i = 1; i <= 9; ++i) {
            for (int j = 1; j <= 11; ++j) if (s[i][j]==46) s[i][j] = 33;
        }
    }
    for (int i = 1; i <= 3; ++i) puts(s[i]+1);
    puts("");
    for (int i = 4; i <= 6; ++i) puts(s[i]+1);
    puts("");
    for (int i = 7; i <= 9; ++i) puts(s[i]+1);
    return 0;
}

C. Shockers

题意

游戏初始选定一个字母,选手要猜出这个字母是什么。

给出游戏进行的过程记录,包括三种格式:

  1. ". word":选手说出的单词中不包含该字母
  2. "! word":选手说出的单词中包含该字母
  3. “? letter”:选手猜了某一个字母,这个行为只在最后一次是正确的

在最后一次之前,每有一个‘!‘或‘?‘,选手都会被电一次。

在某个时刻起,答案就唯一确定了,问从那个时刻起到最后,选手被电了多少次?

思路

也是直接模拟。

在到达唯一确定的时刻之前:

  1. 遇到‘!‘:对目前可能的字母和这个word中的字母取个交集
  2. 遇到‘.‘:对目前可能的字母和这个word中的字母取个差集
  3. 遇到‘?‘:对目前可能的字母和这个letter取个差集

边做边记录当前有多少个可能的字母,一旦为1,则答案唯一确定。

一旦答案唯一确定了,接下来只需要统计有多少次不是‘.‘就电了多少次。

Code

#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
char s[100010];
bool ok[1010], exist[1010];
int main() {
    int n;
    scanf("%d", &n);
    bool flag = false;
    int cnt=0;

    for (int i = 'a'; i <= 'z'; ++i) ok[i] = 1; int num = 26;
    for (int i = 0; i < n; ++i) {
        char ch;
        scanf("\n%c%s", &ch, s);
        if (flag) {
            if (ch != '.' && i != n-1) ++cnt;
        }
        else {
            if (ch == '!') {
                int len = strlen(s);
                memset(exist, 0, sizeof exist);
                for (int j = 0; j < len; ++j) exist[s[j]] = 1;
                for (int j = 'a'; j <= 'z'; ++j) {
                    if (ok[j] && !exist[j]) --num, ok[j] = 0;
                }
                if (num == 1) flag = true;
            }
            else if (ch == '.') {
                int len = strlen(s);
                memset(exist, 0, sizeof exist);
                for (int j = 0; j < len; ++j) exist[s[j]] = 1;
                for (int j = 'a'; j <= 'z'; ++j) {
                    if (ok[j] && exist[j]) --num, ok[j] = 0;
                }
                if (num == 1) flag = true;
            }
            else if (ch == '?') {
                if (ok[s[0]]) --num, ok[s[0]] = 0;
                if (num == 1) flag = true;
            }
        }
    }
    printf("%d\n", cnt);
    return 0;
}

胡言乱语

应该是2017年的最后一场了。

接下来要好好复习(补天)准备期末考了。

今天这场...真是很曲折了...

睡到十点急急忙忙爬起来开电脑,错过了registration...

然后迷迷糊糊写了第一题,等到开始十分钟后的extra registration...一交就WA了...

因神志不清而隐隐的有些担心+慌张+迷茫 // 啥

然后A题WA了两发(...),B题WA了两发(没去掉freopen),C题WA了一发(少写一句话)

之后写E题写了四十分钟搜索...(躺倒 还没debug完毕...不知道啥时候再写了

竟然...涨了rating

技术分享图片

技术分享图片

好啦我的2017

出去的两场区域赛一直都想写博客来着然而太忙了什么的

cf一直写些没什么水平的题以及博客还为之浪费了不少时间

不啰嗦了睡觉了

希望我的期末一切顺利

Codeforces Round #454 Div. 2 A B C (暂时)

标签:printf   return   吐槽   puts   inline   思路   codeforce   答案   size   

原文地址:http://www.cnblogs.com/kkkkahlua/p/8095463.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!