蜗蜗荣耀
描述
蜗蜗国最近很流行一个游戏,名字叫做“蜗蜗荣耀”。在这个游戏里,有排位赛的机制。玩家一开始拥有一个 0 星账号,如果能够得到 50 星,那么就意味着他(她)达到了最强的蜗蜗王者级别。
要如何得到星呢?要通过不断胜利来获取。规则如下:
如果连胜一场(比如只赢了一场就是连胜一场),则总共获得一颗星,如果连胜两场,第二场胜利可以获得 2 颗星,总共获得 1 + 2 = 3 颗星,如果连胜三场,则总共获得 1 + 2 + 3 = 6 颗星,如果有一次战败,则连胜状态就结束了。同样,如果连败也是会掉星的(丢失星星),如果连败一场,则总共丢掉 1 颗星,如果连败两场,第二场失败会丢掉 2 颗星,总共丢掉 1 + 2 = 3 颗星,如果连败三场,则总共丢掉 1 + 2 + 3 = 6颗星。但是如果已经没有星星了,也就不会丢失了,只会维持在0星状态。如果有一次获胜,则连败状态就结束了。
小蜗蜗最近和朋友打赌,自己能够达到蜗蜗王者。他总共打了 n 场比赛,每场比赛的结果用 0 和 1 来表示, 0 表示败了, 1 表示胜了,请你帮他算一算,打完以后他是不是蜗蜗王者。如果是的话,请输出Yes,如果不是,请你计算出,假设他接下来每一场都是胜利的,那么至少还需要几场才能够达到蜗蜗王者,注意,连胜状态是持续的,例如打过的 n 场中的倒数第二场是失败而最后一场是胜利,那么额外打的第一场会获得 2 颗星,因为这是连胜的第二场。
输入格式
第一行一个正整数 n。
接下来一行,一共 n 个数( 0 或者 1 ),中间用空格隔开,表示这 n 场蜗蜗的胜败状态。
输出格式
一行, 如果达到了(最后星数 ≥50)则为一个字符串Yes,否则为一个整数,表示蜗蜗至少还需要几场胜利才能够达到蜗蜗王者。
样例输入1
9
1 1 1 1 1 1 1 1 1
样例输出1
1
样例解释1
前面 9 场连胜总共获得的星星数量为 1 + 2 + …… + 9 = 45 。没有达到蜗蜗王者。
接下来再获胜 1 场,则为连胜的第十场,获得 10 颗星,总共有了 55 颗星,超过了 50 ,达到了蜗蜗王者。
样例输入2
16
1 0 1 0 0 1 1 1 1 1 1 1 1 1 1 0
样例输出2
Yes
样例解释2
最后有 54 颗星,达到了蜗蜗王者。
数据范围
对于 100% 的数据,保证 1≤n≤5000。
有意思,你哪块不行啊
#include <iostream>
using namespace std;
int main()
{
int last = 1,score = 0,n,m,total = 0;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>m;
if(i==0)
{
last = m;
score = 1;
if(m>0)
total+=score;
}
else
{
if(m == 0) //如果输
{
if(last == 0) //之前输,累积扣分
{
score++;
if(total >score)
total -= score;
else
total = 0;
}
else//之前赢,切换状态
{
score = 1;
last = 0;
if(total > 0)
total-= score;
}
}
else //如果赢
{
if(last == 1) //之前赢,累积加分
{
score++;
total += score;
}
else//之前输,切换状态
{
score = 1;
last = 1;
if(total > 0)
total-= score;
}
}
}
}
if(total < 50)
{
int num = 0;
if(last < 0)
score = 0;
while(total < 50)
{
score++;
total += score;
num++;
}
cout<<num<<endl;
}
else
cout<<"Yes"<<endl;
return 0;
}
```c++
#include<bits/stdc++.h>
using namespace std;
int n;
int a[5001];
int sum=1,bug=1,dw=0,wc=0,wnm=0;
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
switch (a[i]) {
case 0:
if(dw-sum>=0){
bug=1;
dw=dw-sum;
sum++;
}
else{
dw=0;
sum++;
}
break;
case 1:
sum=1;
dw=dw+bug;
bug++;
break;
}
}
if(dw>=50){
printf("Yes");
}
else{
wc=50-dw;
while(wc>0){
wc=wc-bug;
bug++;
wnm++;
}
printf("%d",wnm);
}
return 0;
}
```
该回答引用ChatGPT
参考下面代码
#include <iostream>
using namespace std;
const int N = 5010;
int n;
int a[N];
int main()
{
cin >> n;
for (int i = 0; i < n; i ++ ) cin >> a[i];
int res = 0;
int s = 0, w = 0;
for (int i = 0; i < n; i ++ )
{
if (a[i] == 0)
{
w ++ ;
s = max(0, s - w);
}
else
{
s += w + 1;
w = 0;
}
if (s >= 50)
{
puts("Yes");
return 0;
}
}
int cnt = 0;
while (s + (cnt + 1) * (cnt + 2) / 2 < 50) cnt ++ ;
cout << cnt << endl;
return 0;
}