C、Grid game 【 Codeforces Round #534 (Div. 2) 】

版权声明:转载请注明出处,谢谢。 https://blog.csdn.net/Mercury_Lc/article/details/86604431

C、Grid game

题意:给你一个4 × 4 的方格,然后给你一些1 × 2 或者 2 × 1的小方格,当这些方格在一行或者一列的时候会消除掉,问最佳放置位置。

思路:QAQ,什么时候思维会变强一些。选定一些地方,只放这几个地方就可以了。两个 flag ,分别是放置行和列的标记,如果没放之前,假设先来到是竖的, 所以先放到上面位置 [ 1 ,  4 ],如果再来一个竖的,那么就可以放到下面消掉了,即位置是 [ 3, 4 ]。如果来的不是竖的,而是横的,我们可以放到 [ 4 , 1 ] 或者 [ 4 , 3 ],为了防止后来的第三个可能是竖的,如果放在 [ 4 , 3 ] 没法消掉,所以先放到前面就可以避免了。

代码:

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>

char s[2000];

int main()
{
    while(~scanf("%s", s))
    {
        int len = strlen(s);
        bool h,l;
        h = false;
        l = false;
        for(int i = 0; i < len; i ++)
        {
            if(s[i] == '0')
            {
                if(l)
                {
                    printf("3 4\n");
                    l = false;
                }
                else
                {
                    printf("1 4\n");
                    l = true;
                }
            }
            else if(s[i] == '1')
            {
                if(h)
                {
                    printf("4 3\n");
                    h = false;
                }
                else
                {
                    printf("4 1\n");
                    h = true;
                }
            }
        }
    }
    return 0;
}

B、 Game with string

栈模拟。

#include <bits/stdc++.h>

using namespace std;

typedef long long ll;

char s[200000];

int main()
{
    while(~scanf("%s", s)){
       int i = 0;
       int j = 1;
       int pos = 1;
       bool flag = false;
        int len = strlen(s);
       stack<char>st;
        while(1){
            flag = false;
            for(i = 0 ; i < len; i ++){
                if(st.empty()){
                    st.push(s[i]);
                }
                else {
                    if(s[i] == st.top()){
                        pos = -pos;
                        st.pop();
                        flag = true;
                    }
                    else {
                        st.push(s[i]);
                    }
                }
            }
            for(len = 0;!st.empty(); len ++){
                s[len] = st.top();
                st.pop();
            }
            if(!flag) break;
        }
        if(pos == 1)printf("No\n");
        else printf("Yes\n");
    }
    return 0;
}

A. Splitting into digits

#include <bits/stdc++.h>

using namespace std;

typedef long long ll;

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

猜你喜欢

转载自blog.csdn.net/Mercury_Lc/article/details/86604431