zoukankan      html  css  js  c++  java
  • Codeforces Round #454 Div. 2 A B C (暂时)

    A. Masha and bears

    题意

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

    现知道

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

    给定四人的体积(保证(V1gt V2gt V3)),要求给出三辆车的大小。

    思路

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

    假设三辆车大小分别为(a,b,c),则有

    [V1leq aleq 2V1 // 熊爸爸\ V2leq bleq 2V2 // 熊妈妈\ V3leq cleq 2V3 // 熊宝宝\ V4leq cleq 2V4 // Masha\ 2V4lt 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
    %d
    %d
    ", 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("
    %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
    ", cnt);
        return 0;
    }
    
    

    胡言乱语

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

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

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

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

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

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

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

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

    竟然...涨了rating

    好啦我的2017

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

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

    不啰嗦了睡觉了

    希望我的期末一切顺利

  • 相关阅读:
    ES6 -- (1) 简介、let、块级作用域、const、顶层对象的属性、globalThis对象
    TS -- (5)声明合并、代码检查
    TS -- (4)类、类与接口、泛型
    TS -- (3)声明文件、内置对象、类型别名、字符串字面量类型、元组、枚举
    TS -- (2)接口、数组的类型、函数的类型
    TS -- (1)环境,快速入门,基础类型,类型断言、变量声明、解构、展开
    css的三定位方式的区别
    Array循环
    scroll操作
    【Nodejs】记一次图像识别的冒险
  • 原文地址:https://www.cnblogs.com/kkkkahlua/p/8095463.html
Copyright © 2011-2022 走看看