积木大赛:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
using namespace std;
int getint()
{
int i=0;char c;
for(c=getchar();c<'0'||c>'9';c=getchar());
for(;c>='0'&&c<='9';c=getchar())i=(i<<3)+(i<<1)+c-'0';
return i;
}
const int N=100005;
int n,ans,a,b;
int main()
{
//freopen("lx.in","r",stdin);
n=getint();
for(int i=1;i<=n;i++)
{
b=getint();
if(b>a)ans+=b-a;
a=b;
}
cout<<ans;
return 0;
}
花匠:
# include <iostream>
# include <algorithm>
# include <string>
# include <cstring>
# include <cmath>
# include <ctime>
# include <cctype>
# include <cstdlib>
# include <cstdio>
# include <vector>
# include <queue>
using namespace std;
long long Read()
{
long long i=0,f=1;char c=getchar();
while(c>'9'||c<'0') {if(c=='-') f=-1; c=getchar();}
while(c>='0'&&c<='9') {i=i*10+(c-'0'); c=getchar();}
return f*i;
}
int dp[100005][2],h[100005],g[100005],n;//dp[i][0] 到第i位时所取的最大花朵数,且h[i]>h[i-1];
//dp[i][1] 到第i位时所取的最大花朵数,且h[i]<h[i-1];
int main(){
n=Read();
for(int i=1;i<=n;++i) h[i]=Read();
for(int i=1;i<=n;++i) dp[i][1]=dp[i][0]=1;
for(int i=2;i<=n;++i){
dp[i][0]=dp[i-1][0];
dp[i][1]=dp[i-1][1];
if(h[i]>h[i-1]) dp[i][0]=max(dp[i-1][0],dp[i-1][1]+1);
if(h[i]<h[i-1]) dp[i][1]=max(dp[i-1][1],dp[i-1][0]+1);
}
cout<<max(dp[n][0],dp[n][1])<<endl;
return 0;
}
华容道:
# include <iostream>
# include <queue>
# include <cmath>
# include <vector>
# include <cstdio>
# include <cstring>
# include <algorithm>
using namespace std;
typedef long long ll;
const int maxn=50;
ll Read()
{
ll i=0,f=1;char c=getchar();
while(c>'9'||c<'0') {if(c=='-') f=-1; c=getchar();}
while(c>='0'&&c<='9') {i=i*10+(c-'0'); c=getchar();}
return f*i;
}
struct node
{
int x,y,k,s;
node(int x,int y,int k,int s) : x(x),y(y),k(k),s(s){}
};
ll n,m,q,ex,ey,sx,sy,tx,ty,ans=-1;
ll Map[maxn][maxn], dis[maxn][maxn][5],move[maxn][maxn][5][5],dep[maxn][maxn];
bool exist[maxn][maxn][5]={false},vis[maxn][maxn]={false};
int turn(int i)
{
if(i==1) return 2;
if(i==2) return 1;
if(i==3) return 4;
if(i==4) return 3;
}
node go(node p,int i){
node t=p;
if(i==1) t.x--;
if(i==2) t.x++;
if(i==3) t.y--;
if(i==4) t.y++;
return t;
}
inline int BFS(node s,node t)
{
memset(vis,false,sizeof(vis));
if(s.x==t.x&&s.y==t.y) return 0;
int all=1e6+7,tot=0;
s.s=1;vis[s.x][s.y]=true;
queue<node >Q;Q.push(s);
while(!Q.empty())
{
node p=Q.front();
Q.pop();
for(int i=1;i<=4;++i)
{
node now=go(p,i);
if(now.x>0&&now.x<=n&&now.y>0&&now.y<=m&&!vis[now.x][now.y]&&Map[now.x][now.y])
{
if(now.x==t.x&&now.y==t.y) all=min(now.s,all);
else ++now.s,vis[now.x][now.y]=true,Q.push(now);
}
}
}
return all;
}
inline void initial()
{
memset(move,1e6+7,sizeof(move));
for(int i=1;i<=n;++i)
for(int j=1;j<=m;++j)
{
if(!Map[i][j]) continue;
Map[i][j]=0;
for(int k=1;k<=4;++k)
for(int l=1;l<=4;++l)
{
node s=go(node(i,j,0,1),k);node t=go(node(i,j,0,1),l);
if(!Map[s.x][s.y]||!Map[t.x][t.y]) continue;
move[i][j][k][l]=BFS(s,t)+1;
}
Map[i][j]=1;
}
}
int SPFA(node s,node t)
{
memset(dis,1e6+7,sizeof(dis));
memset(exist,false,sizeof(exist));
queue<node >Q;
if(s.x==t.x&&s.y==t.y) return 0;
if(Map[s.x][s.y]==0||Map[t.x][t.y]==0) return -1;
Map[s.x][s.y]=0;
for(int i=1;i<=4;++i)
{
node p=node(s.x,s.y,i,0);
Q.push(p);exist[p.x][p.y][p.k]=true;
dis[p.x][p.y][p.k]=BFS(node(ex,ey,0,1),go(s,i));
}
Map[s.x][s.y]=1;
while(!Q.empty())
{
node now=Q.front();
exist[now.x][now.y][now.k]=false;
Q.pop();
for(int i=1;i<=4;++i)
{
node p=go(now,i);
p.k=turn(i);
if(dis[p.x][p.y][p.k]>dis[now.x][now.y][now.k]+move[now.x][now.y][now.k][i])
{
dis[p.x][p.y][p.k]=dis[now.x][now.y][now.k]+move[now.x][now.y][now.k][i];
if(!exist[p.x][p.y][p.k]) Q.push(p), exist[p.x][p.y][p.k]=true;
}
}
}
ll ans=1e6+7;
for(int i=1;i<=4;i++) ans=min(ans,dis[t.x][t.y][i]);
return ans;
}
int main()
{
n=Read(),m=Read(),q=Read();
for(int i=1;i<=n;++i)
for(int j=1;j<=m;++j)
Map[i][j]=Read();
initial();
for(int i=1;i<=q;++i)
{
ex=Read(),ey=Read(),sx=Read(),sy=Read(),tx=Read(),ty=Read();
ans=SPFA(node(sx,sy,0,0),node(tx,ty,0,0));
if(ans==1e6+7) printf("-1\n");
else printf("%d\n",ans);
}
return 0;
}