算是给自己看的纠错题单啦,哈!
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);
}
}