牛客小白月赛84

A 打靶

题目描述

小蓝非常喜欢玩FPS类游戏,最近他迷上了一款打靶游戏,已知总共会出现 n\mathit nn 个靶子,每次开枪如果打中了靶子则会得到 1\text 11 分,另外不论这次开枪打中与否,靶子都将消失,现在有 m\mathit mm 个靶子已经出现过(出现过的靶子不会再出现),现在小蓝已经得到了 X\mathit XX 分,小蓝想知道他是否有可能最终分数为 Y\mathit YY 。

输入描述:

 
  

第一行包含一个整数 T(1≤T≤100)T (1 \leq T \leq 100 )T(1≤T≤100) ,表示测试用例的组数。

对于每组测试用例:

输入一行包含四个整数 n,m,X,Y(1≤m≤n≤106,0≤X≤m,0≤Y≤109)n,m,X,Y( 1 \leq m \leq n \leq 10^6,0 \leq X \leq m,0 \leq Y \leq 10^9)n,m,X,Y(1≤m≤n≤106,0≤X≤m,0≤Y≤109) 。

输出描述:

 
  

对于每组测试用例:

输出一个字符串,若小蓝想最终分数有可能为 Y\mathit YY 则输出 "Yes" ,否则输出 "No" (不带引号)。

示例1

输入

3
5 3 1 3
5 3 2 3
5 3 1 4

输出

Yes
Yes
No
void sol(){
    int n,m,x,y;cin>>n>>m>>x>>y;
    cout<<(n-m>=y-x&&x<=y?"Yes":"No")<

B 小蓝的疑惑

题目描述

又到了上数学课的日子,老师在讲台上面讲课,问了一个问题,现有 a,ba,ba,b 两正整数,给定 gcd(a,b)gcd(a,b)gcd(a,b) 和 lcm(a,b)lcm(a,b)lcm(a,b) ,问能否求得 a,ba,ba,b 两正整数,恰好数学老师看到这时候小蓝在课堂上睡觉,于是数学老师点名提问了小蓝,小蓝想向你求助答案,如果有多对合法的 a,ba,ba,b ,输出 a\mathit aa 最小的那一对答案,若仍然有多个 a\mathit aa 最小的答案对,输出 a\mathit aa 最小且 b\mathit bb 最小的答案,否则输出 "-1" (不带引号)。

输入描述:

 
  

第一行包含一个整数 T(1≤T≤100)T (1 \leq T \leq 100)T(1≤T≤100) ,表示测试用例的组数。

对于每组测试用例:

输入一行包含两个整数 X,Y(1≤X,Y≤105)X,Y (1 \leq X,Y \leq 10^5)X,Y(1≤X,Y≤105) 分别表示 gcd(a,b)gcd(a,b)gcd(a,b) 和 lcm(a,b)lcm(a,b)lcm(a,b) 。

输出描述:

 
  

对于每组测试用例:

仅输出一行。若有合法的 a,ba,ba,b 则输出两个数表示答案。否则输出 "-1" (不带引号)。

void sol(){
    int x,y;cin>>x>>y;
    if(y%x!=0) return cout<<-1<
C k级序列

题目描述

小蓝得到了一个长度为 n\mathit nn 的序列 a\mathit aa ,以及一个非负整数 k\mathit kk ,小蓝想知道是否存在一个长度为 n\mathit nn 的序列 b\mathit bb 使得 ∀1≤i≤n,∣ai−bi∣≤k\forall 1\leq i \leq n,\left| a_i-b_i \right| \leq k∀1≤i≤n,∣ai​−bi​∣≤k 均满足并且 b\mathit bb 序列非降序。

我们称一个长度为 n\mathit nn 的序列 b\mathit bb 非降序当且仅当对于 ∀2≤i≤n,bi−1≤bi\forall 2 \leq i \leq n,b_{i-1} \leq b_i∀2≤i≤n,bi−1​≤bi​ 均满足。

输入描述:

 
  

第一行包含一个整数 T(1≤T≤105)T (1 \leq T \leq 10^5)T(1≤T≤105) ,表示测试用例的组数。

对于每组测试用例:

第一行输入两个整数 n,k(1≤n≤2⋅105,0≤k≤109)n,k (1 \leq n \leq 2 · 10^5,0 \leq k \leq 10^9 )n,k(1≤n≤2⋅105,0≤k≤109) 。

第二行输入 nnn 个整数表示序列 a(−109≤ai≤109)a (-10^9 \leq a_i \leq 10^9)a(−109≤ai​≤109) 。

保证 ∑i=1Tn≤106\sum_{i=1}^{T}{n} \leq 10^6∑i=1T​n≤106 。

输出描述:

 
  

对于每组测试用例:

输出一个字符串,若存在序列 b\mathit bb 则输出 "Yes" ,否则输出 "No" (不带引号)。

void sol(){
    int n,k;cin>>n>>k;
    vector a(n+1),b(n+1);
    b[0]=-1e18;

    rep(i,1,n) cin>>a[i];

    rep(i,1,n) {
        ll l=max(b[i-1],a[i]-k),r=a[i]+k;
        if(l>r) return cout<<"No"<
D Reverse

题目描述

小蓝在异世界游玩,这天他在异世界中发现了一个阵法,出于好奇小蓝进入了这个阵法,在阵法里小蓝获得了一个长度为 n\mathit nn 的 010101 串,现在小蓝想要出去,但是阵法被下了禁制,小蓝必须要回答对若干次关于 010101 串的问题才能解开阵法,具体来说,有 q\mathit qq 次询问,每次询问给出两个整数 l,r\mathit l, \mathit rl,r 表示一个区间,其中 l\mathit ll 为左端点, r\mathit rr 为右端点,表示将 s\mathit ss (下标从 1\text 11 开始)串的区间 [l,r][ \mathit l, \mathit r][l,r] 翻转,问翻转后的整个 010101 串中连续 1\text 11 的段数有多少段,以小蓝的水平难以作答,请你帮他脱困。

每次询问独立。

输入描述:

 
   
第一行输入两个正整数 n,q(1≤n≤106,1≤q≤2⋅105)\mathit n, \mathit q (1\leq \mathit n \leq 10^6 , 1\leq \mathit q\leq 2·10^5)n,q(1≤n≤106,1≤q≤2⋅105) 。
第二行输入一个 010101 字符串  s\mathit ss ,其中 s\mathit ss 的长度为 n\mathit nn 。
接下来 q\mathit qq 行,每行输入两个整数 l,r(1≤l≤r≤n)\mathit l, \mathit r(1\leq \mathit l \leq \mathit r \leq \mathit n)l,r(1≤l≤r≤n) 。

输出描述:

对于第 i\mathit  ii 个询问,输出一个整数表示将区间 [l,r][ \mathit l, \mathit r][l,r] 翻转后,整个 010101 串中连续 1\text 11 的段数。
void sol(){

    int n,q;cin>>n>>q;
    string s;cin>>s;
    s+='0';

    int cnt=0;
    rep(i,1,n) if(s[i]=='0'&&s[i-1]=='1') cnt++;


    while(q--) {
        int L,R;cin>>L>>R;
        L--,R--;
        if(s[L]==s[R]) 
            cout<0&&s[L-1]=='1') ans--;
            if(R0&&s[L-1]=='1') ans++;
            if(R
E Dog vs Cat


 

题目描述

小蓝最近在异世界的国度中生活,最近国度中丞相的空缺,有两位候选人,我们称其中一人为 Dog 先生,另一人为 Cat 先生,他们俩因为谁上位的问题一直摩擦不断,国王也很无奈,于是请小蓝解决这个问题,小蓝想到了一个办法:给定长度为 n\mathit nn 的序列 a\mathit aa , Dog 先生和 Cat 先生每次可以将序列 a\mathit aa 中的某个非零数减一,两人轮流操作, Cat 先生先手,若某人无法进行操作或者操作后出现以下局面则输掉比赛:
1、设 x\mathit xx 为序列 a\mathit aa 中的最小数,设 cnt[x]cnt[x]cnt[x] 为数字 x\mathit xx 在序列 a\mathit aa 中出现的次数,n−cnt[x]≤cnt[x]
2、x=0\mathit x=\text 0x=0 且 cnt[x]=ncnt[x]= \mathit ncnt[x]=n 。

国王看到这个游戏觉得很好,于是下令谁赢得这场游戏谁就是新的丞相,已知 Dog 先生和 Cat 先生都发挥最佳,最终是谁成为了新丞相?

输入描述:

 
    
第一行包含一个整数 T(1≤T≤106)T(1 \leq T \leq 10^6)T(1≤T≤106),表示测试用例的组数。
对于每组测试用例:
第一行输入一个正整数 n(1≤n≤106)n(1 \leq n \leq 10^6)n(1≤n≤106) 。
第二行输入 nnn 个整数表示序列 a(0≤ai≤109)a(0 \leq a_i \leq 10^9)a(0≤ai​≤109) 。
保证 ∑i=1Tn≤106\sum_{i=1}^{T}{n \leq 10^6}∑i=1T​n≤106 。

输出描述:

 
    
对于每组测试用例:
输出一个字符串,若Cat先生成为新丞相输出 "Cat" ,否则输出 "Dog" (不带引号)。
void sol(){
    int n;cin>>n;

    vector a(n+1);
    rep(i,1,n) cin>>a[i];

    if(n==1) {
        if(a[1]==0) cout<<"Dog"<=n) cout<<"Dog"<
F 小蓝的构造

题目描述

一年一度的圣诞节要到了,如果你也想圣诞老人送你礼物的话,请试着解决圣诞老人留下的这个问题。

对于一个 010101 串 t\mathit tt ,定义函数 f(t,x)=∑r−l=x[t[l]=′0′&&t[r]=′1′]f(t,x)=\sum_{r-l=x}{[t[l]='0'\&\&t[r]='1']}f(t,x)=∑r−l=x​[t[l]=′0′&&t[r]=′1′] ,现在圣诞老人希望你给他一个长度为 n\mathit nn 的字符串 t\mathit tt ,而且,圣诞老人会规定 f(t,1)f(t,1)f(t,1) ~ f(t,n−1)f(t,n-1)f(t,n−1) 的值,你能否构造出一个合法的字符串 t\mathit tt 交给圣诞老人?如果有多个答案 输出任意一个即可,否则输出 "-1" (不带引号)。

输入描述:

 
     

第一行输入一个正整数 n(2≤n≤40)n(2 \leq n \leq 40)n(2≤n≤40) 。

第二行输入一个长度为 n−1n-1n−1 的序列 a(0≤ai≤⌊n2⌋)a(0 \leq a_i \leq \lfloor \dfrac {n}{2} \rfloor )a(0≤ai​≤⌊2n​⌋) 表示 f(t,1)f(t,1)f(t,1) ~ f(t,n−1)f(t,n-1)f(t,n−1) 。

输出描述:

如果有解,则输出一个长度为 n\mathit nn 的字符串表示答案,如果有多个答案 输出任意一个即可。否则输出 "-1" (不带引号)。
void sol(){
    int n;cin>>n;
    vector f(n);
    rep(i,1,n-1) cin>>f[i];
    
    string s;
    auto check=[&](int fl)->bool {
        s=string(n,'0');
        rep(i,0,(n-1)/2+1) if(fl>>i & 1) s[i]='1';

        per(len,n-1,1) {
            int cnt=0;
            for(int i=0,j=len;j=(n-1)/2+1&&cnt==f[len]-1&&s[0]=='0') s[len]='1';
                else return false;
            }
        }

        return true;
    };

    for(int i=0;i<(1<<((n-1)/2+1));i++) 
        if(check(i)) return cout<

你可能感兴趣的:(牛客,牛客小白月赛84,c++,c语言)