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]);
}
}