P7203 [COCI2019-2020#3] Preokret
P7203 Preokret
这题就是个大模拟
第一个问就是要算两队的得分情况。即在输入的时候用两个计数器进行统计即可,最后输出答案,第一个问就解决了。
第二个问题是要算打平的次数。注意题目有声明
重点来讲一下第三个问:
首先我们要在遍历整个过程时,重新统计得分。当当前的数字和下一个数字不一样的时候,那么就有可能出现翻盘的情况。但是要在
#include<bits/stdc++.h>
using namespace std;
#define LL long long
const int N = 1e5 + 10;
const int INF = 0x3f3f3f3f;
int a[N];
int main()
{
int n;
cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i];
int sum=0,ans=1,num=0;//ans=1是因为0:0也算作一个平局 ,sum是A队 num是B队
for(int i=1;i<=n;i++)
{
if(a[i]==1)
sum++;
else if(a[i]==2)
num++;//分类讨论
if(sum==num)//平局的操作
ans++;
}
cout<<sum<<" "<<num<<endl;
cout<<ans<<endl;// 第一和第二个操作
int maxx=0;
sum=0,num=0;
for(int i=1;i<=n;i++)
{
if(a[i]==1)
sum++;
else if(a[i]==2)
num++;
int sheng=0;
if(a[i+1]!=a[i]&&((num>sum)||(sum>num)))//当当前的数字和下一个数字不一样的时候,那么就有可能出现翻盘的情况。但是要在num和sum不相同的情况下
{
for(int j=i+1;j<=n;j++)//枚举下一个数的情况
{
if(a[j]!=a[i])//若不一样,视为进球
sheng++;
else
break;
}
if(a[i]==1)
{
if(num+sheng>sum)
maxx=max(maxx,sheng);
}
else
{
if(sum+sheng>num)
maxx=max(maxx,sheng);
}
//操作一样 统计 maxx的最大的数
}
}
cout<<maxx<<endl;//输出
return 0;//完美的结束
}
理解万岁! 拒绝抄袭!
再次请求管理员可以通过