Codeforces Round #208 (Div. 2)

CodeForces 358A Dima and Continuous Line

思路:暴力看有无区间交错重叠,如[2,5]和[4,6]。注意[2,5],[4,5]不符合题意。


/*************************************************************************
     File Name: A.cpp
     ID: obsolescence
     BLOG: http://blog.csdn.net/obsolescence
     LANG: C++ 
     Mail: 384099319@qq.com 
     Created Time: 2016年07月23日 星期六 09时41分30秒
 ************************************************************************/
#include<bits/stdc++.h>
#define Max(x,y) ((x)>(y)?(x):(y))
#define Min(x,y) ((x)<(y)?(x):(y))
#define each(it,v) for(__typeof((v).begin()) it=(v).begin();it!=(v).end();++it)
#define Abs(x,y) ((x)>(y)?((x)-(y)):((y)-(x)))
#define ll long long
#define Mem0(x) memset(x,0,sizeof(x))
#define Mem1(x) memset(x,-1,sizeof(x))
#define MemX(x) memset(x,0x3f,sizeof(x))
#define pb push_back
using namespace std;
const int N=1010;
struct node{
  int x,y;
}b[N];
int a[N];

int main(){
  int n,i,j;
  while(~scanf("%d",&n)){
    for(i=0;i<n;++i)scanf("%d",a+i);
    if(n<=3)puts("no");
    else{
      bool flag=0;
      for(i=1;i<n;++i){
        b[i].x=a[i-1];
        b[i].y=a[i];
        if(b[i].x>b[i].y)swap(b[i].x,b[i].y);
      }
      for(i=1;i<n;++i)
        for(j=i+1;j<n;++j){
          if(b[j].x<b[i].x && b[i].x<b[j].y && (b[j].x>b[i].y || b[i].y>b[j].y))flag=1;//!!!
          if(b[j].x<b[i].y && b[i].y<b[j].y && (b[j].x>b[i].x || b[i].x>b[j].y))flag=1;//!!!
          //cout<<"i="<<i<<" j="<<j<<" flag="<<flag<<endl;
        }
      if(flag)puts("yes");
      else puts("no");
    }
  }
}



CodeForces 358B Dima and Text Messages

水题,直接贴代码


/*************************************************************************
     File Name: B.cpp
     ID: obsolescence
     BLOG: http://blog.csdn.net/obsolescence
     LANG: C++ 
     Mail: 384099319@qq.com 
     Created Time: 2016年07月23日 星期六 09时41分44秒
 ************************************************************************/
#include<bits/stdc++.h>
#define Max(x,y) ((x)>(y)?(x):(y))
#define Min(x,y) ((x)<(y)?(x):(y))
#define each(it,v) for(__typeof((v).begin()) it=(v).begin();it!=(v).end();++it)
#define Abs(x,y) ((x)>(y)?((x)-(y)):((y)-(x)))
#define ll long long
#define Mem0(x) memset(x,0,sizeof(x))
#define Mem1(x) memset(x,-1,sizeof(x))
#define MemX(x) memset(x,0x3f,sizeof(x))
#define pb push_back
using namespace std;
const int N=1e5+10;
string s[N],ss;

int main(){
  int n,i,j;
  while(cin>>n){
    for(i=0;i<n;++i)
      cin>>s[i];
    cin>>ss;
    int pos=0;
    bool flag=1;
    while(ss[pos] && ss[pos]!='<')pos++;
    if(!ss[pos])flag=0;
    else pos++;//!!!
    while(ss[pos] && ss[pos]!='3')pos++;
    if(!ss[pos])flag=0;
    else pos++;
    for(i=0;i<n && flag;++i){
      for(j=0;s[i][j] && flag;++j){
        while(ss[pos] && ss[pos]!=s[i][j])pos++;
        if(!ss[pos])flag=0;
        else pos++;
      }
      while(ss[pos] && ss[pos]!='<')pos++;
      if(!ss[pos])flag=0;
      else pos++;
      while(ss[pos] && ss[pos]!='3')pos++;
      if(!ss[pos])flag=0;
      else pos++;
    }
    if(flag)cout<<"yes"<<endl;
    else cout<<"no"<<endl;
  }
}



CodeForces 358C Dima and Containers

题意:给queue,stack,deque三个容器。0:取出值,最多3个,从不同的容器里取,x:将x放入容器。模拟最大化取出值之和的过程。

思路:其实就是模拟用三个容器维护三个最大值。预处理最大值,x是最大值时放入queue,然后再用stack,deque维护两个最大值,x比stack栈顶元素和deque队顶元素的较小值还小则压入deque队底,x比较小值大的话就淘汰该较小值,较小值在stack里就将x压入stack,在deque里就将压入deque队顶。


/*************************************************************************
     File Name: C.cpp
     ID: obsolescence
     BLOG: http://blog.csdn.net/obsolescence
     LANG: C++ 
     Mail: 384099319@qq.com 
     Created Time: 2016年07月23日 星期六 11时37分24秒
 ************************************************************************/
#include<bits/stdc++.h>
#define Max(x,y) ((x)>(y)?(x):(y))
#define Min(x,y) ((x)<(y)?(x):(y))
#define each(it,v) for(__typeof((v).begin()) it=(v).begin();it!=(v).end();++it)
#define Abs(x,y) ((x)>(y)?((x)-(y)):((y)-(x)))
#define ll long long
#define Mem0(x) memset(x,0,sizeof(x))
#define Mem1(x) memset(x,-1,sizeof(x))
#define MemX(x) memset(x,0x3f,sizeof(x))
#define pb push_back
using namespace std;
const int N=1e5+10;
int a[N];

int main(){
  int n,i,k;
  while(~scanf("%d",&n)){
    i=0;
    while(i<n){
      int maxn=0,j=i;
      for(;i<n;++i){
        scanf("%d",a+i);
        if(!a[i])break;
        maxn=Max(maxn,a[i]);
      }
      //cout<<"i="<<i<<endl;
      ++i;
      queue<int> q;
      stack<int> s;
      deque<int> d;
      int cnt=0;
      for(k=j;k<i-1;++k){
        if(a[k]==maxn && q.empty()){
          q.push(a[k]);
          puts("pushQueue");
          cnt++;
        }else{
          if(s.empty()){
            s.push(a[k]);
            puts("pushStack");
            cnt++;
          }else if(d.empty()){
            d.push_front(a[k]);
            puts("pushFront");
            cnt++;
          }else if(s.top()<=d.front()){
            if(a[k]<s.top()){
              d.push_back(a[k]);
              puts("pushBack");
            }else{
              s.push(a[k]);
              puts("pushStack");
            }
          }else{
            if(a[k]<d.front()){
              d.push_back(a[k]);
              puts("pushBack");
            }else{
              d.push_front(a[k]);
              puts("pushFront");
            }
          }
        }
      }
      //cout<<"a["<<k<<"]="<<a[k]<<endl;
      if(k<n && !a[k]){
        printf("%d",cnt);
        if(!s.empty())printf(" popStack");
        if(!q.empty())printf(" popQueue");
        if(!d.empty())printf(" popFront");
        puts("");
      }
    }
  }
}



CodeForces 358D Dima and Hares

思路:dp。

dp[i][0]表示第i只兔子比第i+1只兔子先喂的前i只最优值。

dp[i][1]表示第i只兔子比第i+1只兔子后喂的前i只最优值。

dp[i][0]=max(dp[i-1][0]+b[i],dp[i-1][1]+a[i]);

dp[i][1]=max(dp[i-1][0]+c[i],dp[i-1][1]+b[i]);


/*************************************************************************
     File Name: D.cpp
     ID: obsolescence
     BLOG: http://blog.csdn.net/obsolescence
     LANG: C++ 
     Mail: 384099319@qq.com 
     Created Time: 2016年07月23日 星期六 09时42分10秒
 ************************************************************************/
#include<bits/stdc++.h>
#define Max(x,y) ((x)>(y)?(x):(y))
#define Min(x,y) ((x)<(y)?(x):(y))
#define each(it,v) for(__typeof((v).begin()) it=(v).begin();it!=(v).end();++it)
#define Abs(x,y) ((x)>(y)?((x)-(y)):((y)-(x)))
#define ll long long
#define Mem0(x) memset(x,0,sizeof(x))
#define Mem1(x) memset(x,-1,sizeof(x))
#define MemX(x) memset(x,0x3f,sizeof(x))
#define pb push_back
using namespace std;
const int N=3010;
int a[N],b[N],c[N],dp[N][2];

int main(){
  int n,i;
  while(~scanf("%d",&n)){
    for(i=1;i<=n;++i)scanf("%d",a+i);
    for(i=1;i<=n;++i)scanf("%d",b+i);
    for(i=1;i<=n;++i)scanf("%d",c+i);
    dp[1][0]=a[1],dp[1][1]=b[1];
    for(i=2;i<=n;++i){
      dp[i][0]=Max(dp[i-1][0]+b[i],dp[i-1][1]+a[i]);
      dp[i][1]=Max(dp[i-1][0]+c[i],dp[i-1][1]+b[i]);
    }
    printf("%d\n",dp[n][0]);
  }
}



CodeForces 358E Dima and Kicks

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值