欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

codeforces D. Game With Array

程序员文章站 2022-06-27 11:52:04
...

codeforces D. Game With Array

题目

题意:

给你两个正数n,sn,s问你你是否有nn个数字,且总和为ss的一个序列,而且要满足存在一个数字kk使得这个序列中有一个区间和不等于kk或者sks-k

思路:

我们可以发现,如果2n>s2*n>s的情况下,不可能会有一个kk符合条件的,比如说3,43,4吧,那么序列一定是1,1,21,1,2,最后的话肯定无论kk是多少,肯定会有满足的,然后我在构造的时候是将,出了最后一个位置的外的其他都设置成了11,那么kk就一定是(s+1)/2(s+1)/2这个值了。

#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <queue>
#include <vector>
#include <string>
#include <cmath>
#include <set>
#include <map>
#include <deque>
#include <stack>
#include <cctype>
using namespace std;
typedef long long ll;
typedef vector<int> veci;
typedef vector<ll> vecl;
typedef pair<int, int> pii;
template <class T>
inline void read(T &ret) {
    char c;
    int sgn;
    if (c = getchar(), c == EOF) return ;
    while (c != '-' && (c < '0' || c > '9')) c = getchar();
    sgn = (c == '-') ? -1:1;
    ret = (c == '-') ? 0:(c - '0');
    while (c = getchar(), c >= '0' && c <= '9') ret = ret * 10 + (c - '0');
    ret *= sgn;
    return ;
}
inline void out(int x) {
    if (x > 9) out(x / 10);
    putchar(x % 10 + '0');

}
int main() {
    int n, m;
    read(n), read(m);
    if (2 * n > m) {
        printf("NO\n");
        return 0;
    }
    printf("YES\n");
    printf("%d ", m - n + 1);
    for (int i = 0; i < n - 1; i++) printf("1 ");
    printf("\n");
    printf("%d", (m + 1) / 2);
    return 0;
}

相关标签: codeforces