zoukankan      html  css  js  c++  java
  • Codeforces Round #534 (Div. 2)

    A. Splitting into digits

    Vasya has his favourite number n. He wants to split it to some non-zero digits. It means, that he wants to choose some digits d1,d2,…,dk, such that 1≤di≤9 for all i and d1+d2+…+dk=n.

    Vasya likes beauty in everything, so he wants to find any solution with the minimal possible number of different digits among d1,d2,…,dk. Help him!

    Input
    The first line contains a single integer n — the number that Vasya wants to split (1≤n≤1000).

    Output
    In the first line print one integer k — the number of digits in the partition. Note that k must satisfy the inequality 1≤k≤n. In the next line print k digits d1,d2,…,dk separated by spaces. All digits must satisfy the inequalities 1≤di≤9.

    You should find a partition of n in which the number of different digits among d1,d2,…,dk will be minimal possible among all partitions of n into non-zero digits. Among such partitions, it is allowed to find any. It is guaranteed that there exists at least one partition of the number n into digits.

    Examples
    input
    1
    output
    1
    1

    input
    4
    output
    2
    2 2

    input
    27
    output
    3
    9 9 9

    Note
    In the first test, the number 1 can be divided into 1 digit equal to 1.

    In the second test, there are 3 partitions of the number 4 into digits in which the number of different digits is 1. This partitions are [1,1,1,1], [2,2] and [4]. Any of these partitions can be found. And, for example, dividing the number 4 to the digits [1,1,2] isn't an answer, because it has 2 different digits, that isn't the minimum possible number.

    题意:尝试用k个数字(0~9)加起来变成n,要求数字种类尽可能少,即能全部用相同的数字时就不用不同的数字。

    正解:cf日常无聊题。第一行输出n,第二行输出n个1即可。

    代码:略

     

    B. Game with string

    Two people are playing a game with a string s, consisting of lowercase latin letters.

    On a player's turn, he should choose two consecutive equal letters in the string and delete them.

    For example, if the string is equal to "xaax" than there is only one possible turn: delete "aa", so the string will become "xx". A player not able to make a turn loses.

    Your task is to determine which player will win if both play optimally.

    Input
    The only line contains the string s, consisting of lowercase latin letters (1≤|s|≤100000), where |s| means the length of a string s.

    Output
    If the first player wins, print "Yes". If the second player wins, print "No".

    Examples
    input
    abacaba

    output
    No

    input
    iiq

    output
    Yes

    input
    abba

    output
    No

    Note
    In the first example the first player is unable to make a turn, so he loses.

    In the second example first player turns the string into "q", then second player is unable to move, so he loses.

    题意:每次从给出的字符串删去两个相连且相同的字符,删去个数为奇数时输出Yes,偶数输出No。

    思路:扫描字符串,找到相连的相同字符后,左端点向左,右端点向右进行搜索,直至左右端点不是相同字符,结束,继续扫描,直至字符串末尾。注意,删除子串后应将删除部分的左端和右端相连,以保证后面的扫描的正确性。解决这个问题,我们可以先对字符串进行链标记,对字符进行串联,即对每一个字符标记一个左字符和右字符,初始即其左右的临近字符,在每次操作后可将该标记进行调整。

    代码:

     1 #include <bits/stdc++.h>
     2 #define MAXN 100005
     3 
     4 char ch[MAXN];
     5 int len, tot;
     6 
     7 struct node {
     8     char s;
     9     int l, r;
    10 } a[MAXN];
    11 .
    12 int chk(int o) {
    13     int l = o, r = o + 1; tot++;
    14     while (a[a[l].l].s == a[a[r].r].s && a[a[l].l].s != '00') 
    15         l = a[l].l, r = a[r].r, tot++;
    16     a[a[r].r].l = a[l].l;
    17     return a[r].r;
    18 }
    19 
    20 int main() {
    21     scanf("%s", ch + 1), len = strlen(ch + 1);
    22     for (int i = 1; i <= len; i++) a[i].s = ch[i], a[i].l = i - 1, a[i].r = i + 1;
    23     for (int i = 1; i <= len; i = (a[i].s == a[i + 1].s && a[i].s != '00') ? chk(i) : i + 1);
    24     printf(tot % 2 ? "Yes" : "No");
    25     return 0;
    26 }

    C. Grid game

    You are given a 4x4 grid. You play a game — there is a sequence of tiles, each of them is either 2x1 or 1x2. Your task is to consequently place all tiles from the given sequence in the grid. When tile is placed, each cell which is located in fully occupied row or column is deleted (cells are deleted at the same time independently). You can place tile in the grid at any position, the only condition is that tiles (and tile parts) should not overlap. Your goal is to proceed all given figures and avoid crossing at any time.

    Input
    The only line contains a string s consisting of zeroes and ones (1≤|s|≤1000). Zero describes vertical tile, one describes horizontal tile.

    Output
    Output |s| lines — for each tile you should output two positive integers r,c, not exceeding 4, representing numbers of smallest row and column intersecting with it.

    If there exist multiple solutions, print any of them.

    Example
    input
    010
    output
    1 1
    1 2
    1 4

  • 相关阅读:
    HDU4857 逃生 拓扑排序
    HDU1285 确定名次 拓扑排序
    【noip模拟赛4】找啊找啊找BF 拓扑排序
    拓扑排序基础
    【noip模拟赛5】任务分配 降维dp
    【noip模拟赛6】收入计划 最大值的最小值 二分答案
    【noip模拟赛5】水流
    标记预期失败
    跳过:
    pytest配置文件:
  • 原文地址:https://www.cnblogs.com/jinkun113/p/10312058.html
Copyright © 2011-2022 走看看