【Codeforces】Codeforces Round #534

Problem A (div 2)

输出n1就完事了。

时间复杂度为O(n)

#include <cstdio>

int main()
{
    int n;
    while(~scanf("%d", &n))
    {
        printf("%d\n", n);
        for(int i = 0; i < n; i++)
        {
            if(i)printf(" ");
            printf("1");
        }
        printf("\n");
    }
    return 0;
}

Problem B (div 2)

首先找出尽可能多的可以选出来并删掉的【两个连续且相同的字母】。这个可以用类似括号匹配的方法维护一个栈来完成。
设找到的字母对数为m,那么当m为奇数时先手必胜,否则先手必败。

时间复杂度为O(len(s))

#include <iostream>
#include <stack>
#include <string>

using namespace std;

int main()
{
    string s;
    while(cin >> s)
    {
        stack<char> stk;
        int ans = 0;
        for(int i = 0; i < s.length(); i++)
        {
            if((!stk.empty()) && (s[i] == stk.top()))
            {
                ans++;
                stk.pop();
            }
            else
            {
                stk.push(s[i]);
            }
        }
        if(ans & 1)
        {
            cout << "Yes" << endl; 
        }
        else
        {
            cout << "No" << endl;
        }
    }
    return 0;
}

Problem A (div 1)

把4*4的网格划成上下两个部分。分别是两行四列的区域。将竖的放到其中一个区域,横的放到另外一个区域。这样的话就永远有空位可以放了。

时间复杂度为O(len(s))

#include <iostream>
#include <vector>
#include <cstring>
#include <string>

using namespace std;

int mp[5][5];

void Clean(int x, int y)
{
    int cntx = 0, cnty = 0;
    for(int i = 0; i < 4; i++)
    {
        cntx += mp[x][i];
        cnty += mp[i][y];
    }
    if(cntx == 4)
    {
        for(int i = 0; i < 4; i++)
        {
            mp[x][i] = 0;
        }
    }
    if(cnty == 4)
    {
        for(int i = 0; i < 4; i++)
        {
            mp[i][y] = 0;
        }
    }
}

pair<int, int> getAns(int a)
{
    if(a == 0)
    {
        for(int i = 0; i < 3; i++)
        {
            for(int j = 0; j < 4; j++)
            {
                if(mp[i][j] != 0)continue;
                if(mp[i+1][j] != 0)continue;
                mp[i][j] = 1;
                mp[i+1][j] = 1;
                Clean(i, j);
                Clean(i+1, j);
                return make_pair(i+1, j+1);
            }
        }
    }
    else
    {
        for(int i = 2; i < 4; i++)
        {
            for(int j = 0; j < 3; j++)
            {
                if(mp[i][j] != 0)continue;
                if(mp[i][j+1] != 0)continue;
                mp[i][j] = 1;
                mp[i][j+1] = 1;
                Clean(i, j);
                Clean(i, j+1);
                return make_pair(i+1, j+1);
            }
        }
    }
    return make_pair(-1, -1);
}

int main()
{
    string s;
    while(cin >> s)
    {
        memset(mp, 0, sizeof(mp));
        for(int i = 0; i < s.length(); i++)
        {
            pair<int, int> pr = getAns(s[i] - '0');
            cout << pr.first << " " << pr.second << endl;
        }
    }
    return 0;
}

后续待补充

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML标准。 注意:讲述HT...
    kismetajun阅读 27,720评论 1 45
  • http://acm.hdu.edu.cn/showproblem.php?pid=1525 题意:给你两个数,每...
    Gitfan阅读 981评论 0 0
  • CSS3简介 CSS3的现状 浏览器支持程度差,需要添加 私有前缀 ; 移动端支持优于PC端; 不断改进中; 应用...
    magic_pill阅读 818评论 0 1
  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,805评论 1 92
  • 【川木香传奇】目录 欢迎戳进来 在我的所有朋友中,川木香无疑是最神秘的一个,他的所有经历和怪闻,知晓的所有故事,别...
    玉龙雕月阅读 997评论 16 6