A.
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 using namespace std; 5 6 char a[300]; 7 8 int main() 9 { 10 while(1) 11 { 12 memset(a,0,sizeof(a)); 13 gets(a); 14 if(a[0]=='#') break; 15 int i,j,sum=0,k; 16 int n=strlen(a); 17 for(i=0;i<n;i++) 18 { 19 k=a[i]-'A'+1; 20 if(a[i]==' ') k=0; 21 sum+=k*(i+1); 22 } 23 printf("%d\n",sum); 24 } 25 return 0; 26 }
//memory:160KB time:0ms
B.
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 using namespace std; 5 6 class Node 7 { 8 public: 9 int x,y,turn; 10 }q[1000024]; 11 12 int n,m,a[1010][1010],x1,x2,y1,y2,add[4][2]={{0,1},{0,-1},{1,0},{-1,0}},hash[1010][1010]; 13 14 int inline push(int x,int y,int turn,int end) 15 { 16 Node t; 17 t.x=x; 18 t.y=y; 19 t.turn=turn; 20 q[end++]=t; 21 return end; 22 } 23 24 bool inline judge(int x,int y) //判断该点是否能走...... 25 { 26 if(x<=n && x>0 && y<=m && y>0 && a[x][y]==0) 27 return true; 28 else return false; 29 } 30 31 bool inline bfs(int x,int y) 32 { 33 memset(hash,0,sizeof(hash)); 34 int f=0,end=0; 35 end=push(x,y,-1,end); 36 hash[x][y]=1; 37 while(f<end) 38 { 39 if(q[f].turn>=2) return false; 40 for(int i=0;i<4;i++) 41 { 42 int dx=q[f].x+add[i][0]; 43 int dy=q[f].y+add[i][1]; 44 int turn=q[f].turn+1; 45 while(judge(dx,dy)||(dx==x2 && dy==y2)) 46 { 47 if(dx==x2 && dy==y2 && a[dx][dy]==a[x][y]) 48 return true; 49 if(!hash[dx][dy]) 50 { 51 hash[dx][dy]=1; 52 end=push(dx,dy,turn,end); 53 } 54 dx+=add[i][0]; //在往该方向还能走的时候,继续往该方向走~ 55 dy+=add[i][1]; 56 } 57 58 } 59 f++; 60 } 61 return false; 62 } 63 64 int main() 65 { 66 while(scanf("%d%d",&n,&m),n,m) 67 { 68 for(int i=1;i<=n;i++) 69 for(int j=1;j<=m;j++) 70 scanf("%d",&a[i][j]); 71 int k; 72 scanf("%d",&k); 73 while(k--) 74 { 75 scanf("%d%d%d%d",&x1,&y1,&x2,&y2); 76 if(a[x1][y1]==0 || a[x2][y2]==0 || a[x1][y1]!=a[x2][y2]) {printf("NO\n");continue;} 77 if(bfs(x1,y1)) 78 printf("YES\n"); 79 else 80 printf("NO\n"); 81 } 82 } 83 return 0; 84 }
//memory:8308KB time:3562ms
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 using namespace std; 5 6 const int MAX=55555; 7 int a[MAX<<2]; 8 9 void build(int l,int r,int x) 10 { 11 if(l==r) 12 { 13 scanf("%d",&a[x]); 14 return; 15 } 16 int mid=(l+r)>>1; 17 build(l,mid,x<<1); 18 build(mid+1,r,x<<1|1); 19 a[x]=a[x<<1]+a[x<<1|1]; 20 } 21 22 void update(int p,int w,int l,int r,int x) 23 { 24 if(l==r) 25 { 26 a[x]+=w; 27 return; 28 } 29 int mid=(l+r)>>1; 30 if(p<=mid) update(p,w,l,mid,x<<1); 31 else 32 update(p,w,mid+1,r,x<<1|1); 33 a[x]=a[x<<1]+a[x<<1|1]; 34 } 35 36 int query(int le,int ri,int l,int r,int x) 37 { 38 if(le<=l && ri>=r) 39 return a[x]; 40 int mid=(l+r)>>1,re=0; 41 if(le<=mid) re+=query(le,ri,l,mid,x<<1); 42 if(ri>mid) re+=query(le,ri,mid+1,r,x<<1|1); 43 return re; 44 } 45 46 int main() 47 { 48 int t,n,cas=0; 49 char str[10]; 50 scanf("%d",&t); 51 while(t--) 52 { 53 printf("Case %d:\n",++cas); 54 scanf("%d",&n); 55 build(1,n,1); 56 while(1) 57 { 58 scanf("%s",str); 59 if(str[0]=='E') break; 60 int a,b; 61 scanf("%d%d",&a,&b); 62 if(str[0]=='Q') printf("%d\n",query(a,b,1,n,1)); 63 else 64 if(str[0]=='S') update(a,-b,1,n,1); 65 else 66 update(a,b,1,n,1); 67 } 68 } 69 return 0; 70 }
//memory:768KB time:218ms
D.
很水~DP
代码:
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 using namespace std; 5 6 int w[1111],v[1111],f[43333]; 7 8 int main() 9 { 10 int t,N,V,i,j; 11 scanf("%d",&t); 12 while(t--) 13 { 14 memset(f,0,sizeof(f)); 15 memset(w,0,sizeof(w)); 16 memset(v,0,sizeof(v)); 17 scanf("%d%d",&N,&V); 18 for(i=1;i<=N;i++) 19 scanf("%d",&v[i]); 20 for(i=1;i<=N;i++) 21 scanf("%d",&w[i]); 22 for(i=1;i<=N;i++) 23 for(j=V;j>=w[i];j--) 24 { 25 int temp=f[j-w[i]]+v[i]; 26 f[j]=max(f[j],temp); 27 } 28 printf("%d\n",f[V]); 29 } 30 return 0; 31 }
//memory:428KB time:15ms
E.
1 #include <stdio.h> 2 #include <iostream> 3 #include <float.h> 4 using namespace std; 5 6 #define MAX 110 7 int a[MAX]; 8 double dp[MAX]; 9 10 int main() 11 { 12 int l,n,c,t,vr,v1,v2; 13 while(~scanf("%d%d%d%d%d%d%d",&l,&n,&c,&t,&vr,&v1,&v2)) 14 { 15 for(int i=1;i<=n;i++) 16 scanf("%d",&a[i]); 17 a[0]=0; 18 dp[0]=0.0; 19 a[n+1]=l; 20 for(int i=1;i<=n+1;i++) 21 { 22 dp[i]=DBL_MAX; 23 for(int j=0;j<i;j++) 24 { 25 double len=1.0*(a[i]-a[j]); 26 double temp=(len>=c)?((c*1.0)/v1+(len-c)*1.0/v2):((len*1.0)/v1); 27 if(j) temp+=t; 28 dp[i]=min(dp[i],dp[j]+temp); 29 } 30 } 31 double rabit_time=(l*1.0)/vr; 32 if(dp[n+1]>rabit_time) 33 printf("Good job,rabbit!\n"); 34 else 35 printf("What a pity rabbit!\n"); 36 } 37 return 0; 38 }
//memory:284KB time:15ms