首页 > 其他 > 详细

[USACO14OPEN]Fair Photography Bronze 题解

时间:2020-06-05 19:01:49      阅读:48      评论:0      收藏:0      [点我收藏+]

先按位置排序。

对于只有一种奶牛的情况,可以 \(O(n)\) 双指针解决。

对于有两种奶牛的情况,考虑做差来判重。

我们做一个前缀和,并在每一刻将差塞入一个数组(这里使用 map)。

时间复杂度 \(O(n\log n)\)

Code:

#include<bits/stdc++.h>
using namespace std;
int n,num,ans,l=1,r=0,xo;
char ch;
struct cow {
 int x;
 int lx;    
} a[100010];
bool cmp(cow a,cow b) {
 return a.x<b.x; 
}
map<int,int> pan;
int main() {
 scanf("%d",&n);
 for(int i=1;i<=n;i++) {
  scanf("%d %c",&a[i].x,&ch);
  if(ch==‘G‘)
   a[i].lx=1;
  else
   a[i].lx=-1; 
 } 
 sort(a+1,a+n+1,cmp);
 for(int i=1;i<=n;i++) { 
  num+=a[i].lx;
  if(pan[num])
   ans=max(ans,a[i].x-a[pan[num]+1].x);
  else
   pan[num]=i; 
 }
 r=1,xo=a[l].lx;
 while(r<=n) {
  if(a[r+1].lx==xo)
   r++;
  else {
   r++,xo=a[r].lx;  
   while(a[l].lx!=xo)
    l++;
  }  
  ans=max(ans,a[r].x-a[l].x);  
 }
 printf("%d",ans);
}

[USACO14OPEN]Fair Photography Bronze 题解

原文:https://www.cnblogs.com/lajiccf/p/13051179.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!