1 条题解
-
0
自动搬运
来自洛谷,原作者为

JF
天真在这条路上 / 跌跌撞撞 / 他被芒草割伤 ||越渴望着实现目标,那赶紧给我行动起来,跟他爆了 ||情为何物,生死相许搬运于
2025-08-24 22:27:37,当前版本为作者最后更新于2021-12-04 19:59:58,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
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;//完美的结束 }理解万岁! 拒绝抄袭!
再次请求管理员可以通过
- 1
信息
- ID
- 5877
- 时间
- 1000ms
- 内存
- 500MiB
- 难度
- 2
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者