P6444 【[COCI2010-2011#1] PROFESOR 】
2020-08-27 22:44
981 查看
用$a_i$和$b_i$表示同桌的两个成绩
$e_{i,l}$表示以$i$结尾,连续的$a_i$的长度
$e_{i,r}$表示以$i$结尾,连续的$b_i$的长度
那么就可以在输入时统计出以上的信息,并求出最长的$l$,又因为使得$k$最小,再循环一次就可以了
#include<bits/stdc++.h> #define MAXN 100000 using namespace std; int n; int a[MAXN],b[MAXN]; struct node{ int l,r; }e[MAXN]; int main(){ scanf("%d",&n); for(register int i=1;i<=n;i++){ e[i].l=e[i].r=1; scanf("%d%d",&a[i],&b[i]); if(a[i-1]==b[i-1]&&a[i]==a[i-1]) e[i].l+=e[i-1].l; else if(a[i]==a[i-1]) e[i].l+=e[i-1].l; else if(a[i]==b[i-1]) e[i].l+=e[i-1].r; if(a[i-1]==b[i-1]&&b[i]==a[i-1]) e[i].r+=e[i-1].l; else if(b[i]==a[i-1]) e[i].r+=e[i-1].l; else if(b[i]==b[i-1]) e[i].r+=e[i-1].r; } int lmax=1,k=999; for(register int i=1;i<=n;i++){ if(e[i].l>lmax) lmax=e[i].l; if(e[i].r>lmax) lmax=e[i].r; } for(register int i=1;i<=n;i++){ if(e[i].l==lmax) k=min(k,a[i]); if(e[i].r==lmax) k=min(k,b[i]); } printf("%d %d",lmax,k); return 0; }
相关文章推荐
- Vue框架入门到实践(一)
- JS的方法
- 【Vue案例二】实现对表单数据的添加、删除以及关键字查询操作
- P1227 【[JSOI2008]完美的对称】
- 这个爬虫JS逆向加密任务,你还不来试试?逆向入门级,适合一定爬虫基础的人
- 降低开发选择成本!用ThingJS实现3D线条渲染
- VUE安装
- vue全局封装组件
- 【Vue案例一】实现跑马灯效果
- Web前端19:CSS3新增属性----背景和边框
- Vue单文件组件 (五)
- css选择器及举例
- 【Vue】class & style:Vue中的两种样式处理方法
- JavaScript实现“空心等腰三角形”(改进版)及“菱形”
- HTML <script> 标签中的 defer/async 属性
- vue组件递归
- vue组件之间通信
- vue学习-初识
- 【Vue】v-bind & v-model指令的使用(实现计算器效果)
- certificate issued for a different hostname, issuer is not trusted