noip2013day2题解

来源:互联网 发布:淘宝上好的家具店 编辑:程序博客网 时间:2024/06/05 07:50

积木大赛:

#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;}