牛客练习赛121 前三题

算是给自己看的纠错题单啦,哈!

A小念吹气球

: 1 second
: 256 megabytes
ICPC
每次成功的提交都会获得 1 个气球 为了 最快解出某道题目的提交将获得 1 个额外的气球。
目的
Input
一个 整数 n (1 n 2 · 10 5 ) 目的
一个 n 每次 只包
Output
一个 整数
Example
standard input
standard output
3
ABA
5
Note
A 1 且他 1
B 1 且他 1
A 1
5
#include<bits/stdc++.h>
using namespace std;
int jiance[150] = {0};

int main()
{
	int n;string str;
	cin>>n>>str;
	
	for(int i=0;i<n;i++)
	{
		
		jiance[((int)str[i])]++;
	//	cout<<((int)str[i])<<endl;
	}	
	int cnt=0;
	for(int i=65;i<=90;i++)
	{
		if(jiance[i]==1) cnt+=2;
		else if(jiance[i]==0) cnt+=0;
		else cnt=cnt+1+jiance[i];
	}
	
	cout<<cnt<<endl;
	return 0;
	
}

题解:这道题我认为直接用输入元素的ASCLL码值作为计数数组的下标,已知A~Z为65-90,计数完后遍历jiance[i]数组,若其为0,则加0个气球,若为1,则加两个气球,其余情况就是jiance[i]+1了。

BYou Brought Me A Gentle Breeze on the Field

: 1 second
: 256 megabytes
Taylor
Ufowoqqqo Taylor
Ufowoqqqo
Ufowoqqqo Cause you know I love the player
Ufowoqqqo And you love the gay
:?
氧气 一个
果有 n 两人 氧气 一个
x 1 min( x, m )
为了 他们 了一个 他们 一个
" " 氧气 " "
" "
Input
一个 整数 T (1 T 2 · 10 5 )
三个 整数 n, m (1 n, m 10 9 ) , p (0 p 1) p = 0 p = 1
Output
" XiaoNian " " YangQiShaoNian "
Example
standard input
standard output
4
3 2 1
5 2 0
1 100 0
1000 1 1
XiaoNian
XiaoNian
YangQiShaoNian
YangQiShaoNian
Note
念得 " " 2 使 "
" 2 1
#include<bits/stdc++.h>
using namespace std;
void solved(int n,int m,int p)
{
	if(n==1){ cout<<"YangQiShaoNian"<<endl;return;}
    //先手小念再这种情况下一定会输掉比赛
	else if(n<=m+1){cout<<"XiaoNian"<<endl;return;}
    //已知最多可以取走min(x,m)个糖果,第一次x就是n,(n<=m+1)就是说小念一定可以取走n-1颗糖果,使得自己取胜。
	else
	{
		if(p==0) {cout<<"XiaoNian"<<endl;return;}
        //小念有两次连续取糖果的机会,他一定可以使自己赢,进入必赢的状态
		else if(p==1) { cout<<"YangQiShaoNian"<<endl;return;}
        //氧气少年有两次连续取糖的机会,他一定也会赢,进入必赢的状态
	}
}

int main()
{
	int t,m,n,p;
	cin>>t;
	while(t--)
	{
		cin>>n>>m>>p;
		solved(n,m,p);
	}
	return 0;
	
} 

C氧气少年的水滴2

: 1 second
: 256 megabytes
I’m making more, just a little bit
Spend a little more to get rid of it
Smile a little more and I’m into it
— OneRepublic, Sunshine
氧气 n i a i (1 a i 9)
a 了一个 b
a + b
加到 10 为两个 1 ),
分别 和向
),
),
中两个 " 肩而 " 话说 们不
氧气 p 了一 1
Input
一个 整数 T (1 T 10 5 )
两个 整数 n (1 n 2 · 10 5 ) , p (1 p n ) 分别
n 整数 a 1 . . . a n (1 a i 9)
n 2 · 10 5
Output
两个 整数 分别
Example
standard input
standard output
3
3 2
9 9 9
4 2
9 9 9 8
3 2
9 8 9
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=2e5+10;
int a[N];
void solved(int a[],ll n,ll p)
{
    int a_left=p-1,a_right=p+1,l=(a[p]==9),r=(a[p]==9);//用l,r分别统计飞向左边和右边的水滴数
    while(1)
    {
        if(a_left>=1&&l>=1)//飞向左边的水滴数一定要不为0和左边一定有水滴
        {
            a[a_left]++;//左边相邻的这个水滴饱和度加1
            l--;//飞向左边的水滴数-1
            if(a[a_left]==10)//若该位置上的水滴饱和度达到10 ,会爆裂
            {
                l++;//则飞向左右的水滴数都会+1
                r++;
                a_left--;//然后位置左移
            }
        }
       if(a_right<=n&&r>=1)//道理同上
        {
            a[a_right]++;
            r--;
            if(a[a_right]==10)
            {
                l++;
                r++;
                a_right++;
            }
        }
       
        if(!(a_left>=1&&l>=1)&&!(a_right<=n&&r>=1))//在不满足以上两种情况后,退出这个循环
        {
            break;
        }
    }
    cout<<l<<" "<<r<<endl;
}

int main()
{
    ll t,n,p;
    cin>>t;
    while(t--)
    {
        cin>>n>>p;
        for(int i=1;i<=n;i++)
        {
            cin>>a[i];
        }
        solved(a,n,p);
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值