2021-01-30

凡凡是一个上进的人,他的人生没有下坡路,他也讨厌带有”下坡路“的东西。

所以,对于凡凡来说,只有非降序的数组才是nice的(如:1,2,2,3,4,5,5);若数组元素个数为1,也满足非降序,也是nice的。

现在有一个长度为n的数组,凡凡想知道它的子数组中有多少个数组是nice的。

你能帮帮他吗?

对于子数组的定义,如果可以通过从开头和从结束分别删除若干个(可以为零或全部,前后删除个数不必相同)元素来从数组b获得数组a,则称数组a是数组b的子数组。(子数组包含原数组,但不包含空串)

输入描述:

 

第一行输入一个整数n(1≤n≤10^5),表示数组的长度。

第二行包含n个空格分隔的整数a1,a2,.,an(0≤ai≤10^9),为数组的元素。

输出描述:

输出给定数组的子数组中是nice数组的个数。(注意使用long long)

示例1

输入

复制

5
1 2 3 4 5

输出

复制

15

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <time.h>
#include <ctype.h>
#include <queue>
#include <stack>
#include <vector>
#include <string>
#include <algorithm>
#include <iostream>

using namespace std;

const int maxn = 1e5 + 5;
long long a[maxn] = {0};
long long b[maxn] = {0};

long long Fact(long long x)
{
    long long an = 0;
    for(long long i = 1; i <= x; i++) an += i;
    return an;
}

int main()
{
    ios::sync_with_stdio(false),cin.tie(NULL);
    int n; cin>>n;
    for(int i = 1; i <= n; i++) cin>>a[i];

    int vis = 0; int cnt = 0; a[0] = -1;
    for(int i = 1; i <= n; i++)
    {
        if(a[i] >= a[i - 1])
        {
            cnt++;
        }
        else
        {
            vis++; b[vis] = cnt;
            cnt = 1;
        }
        if(i == n)
        {
            vis++; b[vis] = cnt;
            cnt = 1;
        }
    }

    long long ans = 0;
    for(int i = 1; i <= vis; i++)
    {
//        cout<<b[i]<<'\n';
        ans += Fact(b[i]);
    }
    cout<<ans<<'\n';
    return 0;
}

 

链接:https://ac.nowcoder.com/acm/contest/11746/D
来源:牛客网
 

长达数日的春日祭终于告一段落,作为巫女的朝野芳乃在打扫完神社本决定好好享受一下久违的宁静。然而守护了神刀数百年的丛雨难耐寂寞,希望芳乃能陪她一起玩扑克消解愁闷。

芳乃并不擅长市井的游戏,所以总是输多赢少。而昨日被芳乃的神乐舞深深吸引,以致一早就前来建实神社希望能再睹芳华的你碰巧听见了此事。尽管不知道为什么美丽的巫女要自言自语地为玩扑克而苦恼,但你毅然决然地毛遂自荐,希望能为芳乃一解眉间愁。

芳乃告诉了你丛雨准备了n张扑克牌作为牌堆,每人每次至多从牌堆顶部抽k张牌,至少抽1张牌。牌堆底部的最后一张牌作为乌龟,抽中的将输掉这一轮比赛。芳乃想知道在你的帮助下,她和丛雨都采取积极策略时,她自己是否一定能获胜。作为被丛雨邀请的一方,每轮游戏都是芳乃先抽。

因为看不见丛雨而误认芳乃罹患精神分裂的你在不由感叹红颜薄命的同时,决定尽全力帮助芳乃完成她的委托。

声明:本题中的所有角色在剧情发生时均已超过18岁。

输入描述:

 

第一行包含一个整数T,表示共有T组测试数据。

每组测试数据共一行,包含两个正整数n和k,分别表示牌堆中有n张牌和每次抽取最多抽取k张。

数据保证T,n,k≤1000000。

输出描述:

 

对于每组测试数据给出一行结果。

如果芳乃必胜,则输出“yo xi no forever!”,

否则输出 ”ma la se mi no.1!“。

示例1

输入

复制4 1 1 23 2 6 4 114 514

4
1 1
23 2
6 4
114 514

输出

复制ma la se mi no.1! yo xi no forever! ma la se mi no.1! yo xi no forever!

ma la se mi no.1!
yo xi no forever!
ma la se mi no.1!
yo xi no forever!

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <time.h>
#include <ctype.h>
#include <queue>
#include <stack>
#include <vector>
#include <string>
#include <algorithm>
#include <iostream>

using namespace std;

int main()
{
    ios::sync_with_stdio(false),cin.tie(NULL);
    int T; cin>>T;
    while(T--)
    {
        int n,m; cin>>n>>m;
        n = n % (m + 1);
        if(n == 1) cout<<"ma la se mi no.1!"<<'\n';
        else cout<<"yo xi no forever!"<<'\n';
    }
    return 0;
}

 

链接:https://ac.nowcoder.com/acm/contest/11746/I
来源:牛客网
 

题目描述

情人节马上要到了,阳阳想送出n朵花给喜欢的妹妹,他打算提前开始买。但是,因为他有强迫症,所有的花要分k天买(k>1,即不能一天全买完),第一天他可以买任意朵花,之后每一天买花的数量为前一天的两倍,(如若第一天买4朵,第二天就要买8朵,以此类推)。

现在离情人节还有15天(k≤15),请你告诉阳阳,他能不能刚好买到n朵花。

输入描述:

 

多组输入。第一行一个正整数T(1<=T<=10^5),表示数据组数。

接下来T行,每行一个正整数n(1<=n<=10^9),表示预计买花的数量。

输出描述:

 

每组数据输出一行,共T行。

判断能否刚好买到n朵花,可以则输出"YE5",否则输出"N0"。

示例1

输入

复制2 21 20

2
21
20

输出

复制YE5 N0

YE5
N0

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <time.h>
#include <ctype.h>
#include <queue>
#include <stack>
#include <vector>
#include <string>
#include <algorithm>
#include <iostream>

using namespace std;

int main()
{
    ios::sync_with_stdio(false),cin.tie(NULL);
    
    int a[20] = {0}; a[0] = 1;
    for(int i = 1; i <= 16; i++)
    {
        a[i] = a[i - 1] + pow(2,i);
//        cout<<a[i]<<'\n';
    }

    int T; cin>>T;
    while(T--)
    {
    int n; cin>>n; bool flag = false;
    for(int i = 1; i <= 14; i++)
    {
        if(n % a[i] == 0)
        {
            flag = true;
            break;
        }
    }

    if(flag) cout<<"YE5"<<'\n';
    else cout<<"N0"<<'\n';
    }
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值