更详细的解题报告请下载:http://download.csdn.net/source/3153210
包括2005-2011,有些题目有多种解法!
http://acm.hdu.edu.cn/showproblem.php?pid=3787
#include<stdio.h> #include<string.h> int main() { char a[100]; while(gets(a)) { int flag=1; int len=strlen(a); int i; __int64 A=0; __int64 B=0; __int64 sum=0; int f1=1,f2=1; for(i=0;i<len;i++) { if(a[i]=='-') { if(flag==1)f1=-1; else f2=-1; } else if(a[i]>='0'&&a[i]<='9') { if(flag==1)A=A*10+(a[i]-48); else B=B*10+(a[i]-48); } else if(a[i]==' ')flag=2; } sum=f1*A+f2*B; printf("%lld/n",sum); } return 0; }
http://acm.hdu.edu.cn/showproblem.php?pid=3788
#include<stdio.h> #include<string.h> int main() { char str[1500]; while(gets(str)) { int len=strlen(str); if(str[0]=='z'&&str[len-1]=='j') { int i; int flag=0; for(i=1;i<len-1;i++) { if(str[i]=='o') { flag=1; } else { flag=0; break; } }// if(flag==1) printf("Accepted/n"); else printf("Wrong Answer/n"); } else if(str[0]=='o') { int n,k; int flag=0; int i; for(i=0;i<len;i++) { if(str[i]=='o') { flag=1; continue; } else if(str[i]=='z') { k=i; break; } else { flag=0; break; } } if(flag==0||str[k+1]!='o') { printf("Wrong Answer/n"); continue; } n=0; flag=0; for(i=k+1;i<len;i++) { if(str[i]=='o') { n++; flag=1; } else if(str[i]=='j') { flag=1; break; } else { flag=0;break; } } if(flag==0||str[k+1]!='o') { printf("Wrong Answer/n"); continue; } if(len!=(k+n+2+n*k)) { printf("Wrong Answer/n"); continue; } flag=1; for(i=k+n+2;i<len;i++) if(str[i]!='o') { flag=0;break; } if(flag==1) printf("Accepted/n"); else printf("Wrong Answer/n"); } else { printf("Wrong Answer/n"); } } return 0; }
http://acm.hdu.edu.cn/showproblem.php?pid=3789
#include<stdio.h> #include<stdlib.h> int N,M; int ans[10005][3]; int Tflag; struct Node { int num; int a,b; int c; int flag; int y; }node1[10005],node2[10005]; int cmp(const void *a,const void *b) { Node *c=(Node *)a; Node *d=(Node *)b; if(Tflag==1) { return d->a-c->a; } else if(Tflag==2) { return d->b-c->b; } else if(Tflag==3) { return (d->a)*(c->c)-(c->a)*(d->c); } return (d->b)*(c->c)-(c->b)*(d->c); } int main() { while(scanf("%d %d",&N,&M)!=EOF) { int i,j; for(i=0;i<N;i++) { scanf("%d %d %d",&node1[i].a,&node1[i].b,&node1[i].c); node1[i].num=i; node1[i].y=0; } for(i=1;i<=M;i++) { scanf("%d",&ans[i][0]); ans[i][1]=ans[i][2]=-1; node1[ans[i][0]].y=1; } for(i=0,j=0;i<N;i++) { if(node1[i].y==1) { node2[j].a=node1[i].a; node2[j].b=node1[i].b; node2[j].c=node1[i].c; node2[j].num=node1[i].num; node2[j].flag=node1[i].flag; j++; } } for(Tflag=1;Tflag<=4;Tflag++) { qsort(node2,M,sizeof(node2[0]),cmp); //node[0].flag=1; for(i=0;i<M;i++) { if(i==0)node2[0].flag=1; else if(Tflag==1) { if(node2[i].a==node2[i-1].a) node2[i].flag=node2[i-1].flag; else node2[i].flag=i+1; } else if(Tflag==2) { if(node2[i].b==node2[i-1].b) node2[i].flag=node2[i-1].flag; else node2[i].flag=i+1; } else if(Tflag==3) { if(node2[i].a*node2[i-1].c==node2[i-1].a*node2[i].c) node2[i].flag=node2[i-1].flag; else node2[i].flag=i+1; } else { if(node2[i].b*node2[i-1].c==node2[i-1].b*node2[i].c) node2[i].flag=node2[i-1].flag; else node2[i].flag=i+1; } int j; for(j=1;j<=M;j++) { if(ans[j][0]==node2[i].num) { if(ans[j][2]==-1) { ans[j][1]=Tflag; ans[j][2]=node2[i].flag; } else if(ans[j][2]>node2[i].flag) { ans[j][2]=node2[i].flag; ans[j][1]=ans[j][1]=Tflag; } break; } }// } // }// for(i=1;i<=M;i++) printf("%d:%d/n",ans[i][2],ans[i][1]); printf("/n"); } return 0; }
http://acm.hdu.edu.cn/showproblem.php?pid=3790
#include<iostream> #include<queue> #include<vector> using namespace std; struct Node { int x,y,z; Node(int a=0,int b=0,int c=0):x(a),y(b),z(c){} }; int d[1005][2]; bool used[1005]; vector<Node>map[1005]; int N,M,S,T; void spfa() { queue<int>q; q.push(S); memset(used,false,sizeof(used)); int i; for(i=1;i<=N;i++) d[i][0]=d[i][1]=-1; d[S][0]=d[S][1]=0; while(!q.empty()) { int node=q.front(); q.pop(); used[node]=false; int t,dis,p; for(i=0;i<map[node].size();i++) { t=map[node][i].x; dis=map[node][i].y; p=map[node][i].z; if(d[t][0]==-1||d[t][0]>d[node][0]+dis) { d[t][0]=d[node][0]+dis; d[t][1]=d[node][1]+p; if(!used[t]) { used[t]=true; q.push(t); } } else if(d[t][0]!=-1&&d[t][0]==d[node][0]+dis) { if(d[t][1]>d[node][1]+p) { d[t][1]=d[node][1]+p; if(!used[t]) { q.push(t); used[t]=true; } } } } } } int main() { while(scanf("%d %d",&N,&M)!=EOF) { if(N==0&&M==0)break; int s,t,dis,p; int i; for(i=1;i<=N;i++) map[i].clear(); while(M--) { scanf("%d %d %d %d",&s,&t,&dis,&p); map[s].push_back(Node(t,dis,p)); map[t].push_back(Node(s,dis,p)); } scanf("%d %d",&S,&T); spfa(); printf("%d %d/n",d[T][0],d[T][1]); } return 0; }
http://acm.hdu.edu.cn/showproblem.php?pid=3791
#include<stdio.h> #include<string.h> #include<stdlib.h> int ok; struct Node { int num; Node *left,*right; }; void fun(Node *root,int n) { if(root->num<n) { if(root->right==NULL) { Node *T=new Node; T->num=n; T->left=T->right=NULL; root->right=T; } else fun(root->right,n); } else { if(root->left==NULL) { Node *T=new Node; T->num=n; T->left=T->right=NULL; root->left=T; } else fun(root->left,n); } return ; } void cmp(Node *r1,Node *r2) { if(ok==0)return ; if(r1->num!=r2->num) { ok=0; return ; } if(r1->left!=NULL&&r2->left!=NULL) { cmp(r1->left,r2->left); } if(r1->right!=NULL&&r2->right!=NULL) { cmp(r1->right,r2->right); } if(r1->left!=NULL&&r2->left==NULL)ok=0; if(r1->left==NULL&&r2->left!=NULL)ok=0; if(r1->right==NULL&&r2->right!=NULL)ok=0; if(r1->right!=NULL&&r2->right==NULL)ok=0; return ; } int main() { int N; char str[15]; while(scanf("%d%*c",&N)!=EOF) { if(N==0)break; gets(str); int len=strlen(str); int i; Node *root1=new Node; root1->left=NULL; root1->right=NULL; root1->num=str[0]-48; for(i=1;i<len;i++) { //if(i==2&&root1==NULL)printf("a/n"); fun(root1,str[i]-48); } while(N--) { ok=1; gets(str); len=strlen(str); Node *root2=new Node; root2->left=NULL; root2->right=NULL; root2->num=str[0]-48; for(i=1;i<len;i++) { fun(root2,str[i]-48); } cmp(root1,root2); if(ok==1)printf("YES/n"); else printf("NO/n"); } } return 0; }
以上代码并不是最优,贴出来只为与广大研友交流!有需要提供个别题目具体思路的请留言!