Codeforces Round #534 (Div. 2)(补题:ABC)

http://codeforces.com/contest/1104

A题

题目大意

将一个数字分成几部分,几部分求和既是原数,问如何分可以使得分出来的各个数之间的差值尽可能小

直接输出 n个 1  就符合题意

#include
using namespace std;
typedef long long ll;
const int N = 2e3+100;
const int INF = 0x3f3f3f3f;
const int mod = 1e9+7;

int main()
{
    int n;
    cin >> n;
    cout << n << endl;
    for(int i = 1;i <= n;i ++) cout << 1 <<" ";
    return 0;
}

B题

题目大意

给出一段字符串,相同且相邻的字母可以消去,消去后被消除的相邻字母的两侧的字符串重新连接在一起,如可以消除奇数次输出"Yes",如可以消除偶数次输出"No"

搞个栈,如果当前栈空直接入栈,否则判断与栈顶元素是否相同,相同则次数加1,且栈顶元素出栈,否则继续入栈

#include
using namespace std;
typedef long long ll;
const int N = 1e5+100;
const int INF = 0x3f3f3f3f;
const int mod = 1e9+7;
int main()
{
    string s;
    stack ss;
    cin >> s;
    int cnt = 0;
    ss.push(s[0]);
    for(int i = 1;i < s.size();i ++){
        if(ss.size() == 0){
            ss.push(s[i]);
            continue;
        }
        if(s[i] == ss.top()){
            cnt ++;
            ss.pop();
        }else{
            ss.push(s[i]);
        }
    }
    if(cnt&1) cout << "Yes";
    else cout << "No";
    return 0;
}

C题

题目大意
给出一个4*4的方阵图,和一串字符串字符串中有1和0两种字符分别代表"1*2"与"2*1"牌子,0代表竖着的牌子,1代表横着的牌子,当一行或者一列被填充满了之后其上将会消去,问若要将字符串顺序的牌子依次入这个方阵图应当如何放置.
第奇数个竖的总之先放在左上角(1,1)的位置,第奇数个横的总是先放在右下角(4,3)位置,当出现第偶数个竖着的牌子则将其放在(3,1),则其就会与提前放置好的奇数个竖牌子消去,当出现第偶数个横的牌子则将其放在(4,1),这样就会与提前放置好的奇数个横牌子消去

#include
using namespace std;
typedef long long ll;
const int N = 1e5+100;
const int INF = 0x3f3f3f3f;
const int mod = 1e9+7;
int main()
{
    string s;
    cin >> s;
    int cnt0=0,cnt1=0;
    for(int i = 0;i < s.size();i ++){
        if(s[i] == '0'){
            cnt0 ++;
            if(cnt0&1) cout << "1 1" << '\n';
            else cout << "3 1" << '\n';
        }else{
            cnt1++;
            if(cnt1&1) cout << "4 3" << '\n';
            else cout << "4 1" << '\n';
        }
    }
    return 0;
}

 

你可能感兴趣的:(Codeforces)