hello kity
期待您的批阅,由于写解题报告时 不一定考虑的很周到,所以如果您有什么不懂的地方,请您留言,然而一天之内我肯定会看见您信息,再对代码注释详细,让您更好的阅读
分类
最新评论
最新留言
链接
RSS
计数器
223057
功能
HDU (1894 String Compare)
题目大意:给你N个单词,让你找出有多少对满足一个单词是另一个单词的前缀
题目分析:这种题目肯定要排序,这样就可以按字典顺序操作了,一个单词是另一个单词的前缀,那么这个单词肯定和他相邻,或者相近,我这里说的是按字典顺序,从小到大,从前面开始往后找,找到不是的那个为止,加上前面已经找到的,然后就这样遍历一遍就OK啦
代码:
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; struct node{ char s[35]; }sim[50100]; int cmp(struct node a,struct node b){ if(strcmp(a.s,b.s)<0) return 1; else return 0; } bool solve(char a[],char b[]){ int len1,len2,i; len1=strlen(a); len2=strlen(b); char c[35]; if(len1==len2)//注意一下这个判断就可以了, //因为题目说,没有两个相同的单词 return false; for(i=0;i<len1;i++){ if(a[i]!=b[i]){ return false; } } return true; } int main(){ int n,cas,i,j,sum; while(scanf("%d",&cas)!=EOF){ while(cas--){ sum=0; scanf("%d",&n); for(i=0;i<n;i++) scanf("%s",sim[i].s); sort(sim,sim+n,cmp); for(i=0;i<n-1;i++){ for(j=i+1;j<n;j++){ if(solve(sim[i].s,sim[j].s)) sum++; else break; } } if(sum>11519) sum=sum%11519; printf("%d\n",sum); } } return 0; }
HDU 1497(Simple Library Management System)
题目大意:图书管管理系统,有三个操作,一个借书,还书,查询。
优化方案:就是一个数组存放书的信息,下标为书的代号,内容存,0或者借走这本书的同学学号,这样可以方便查询!
#include<stdio.h> #include<iostream> #include<cstring> #include<algorithm> using namespace std; int stu,n; struct node{ int num; int t[15]; }s[1010]; int book[100005]; void init(){ for(int i=1;i<=stu;i++){ memset(s[i].t,0,sizeof(s[i].t)); s[i].num=0; } memset(book,0,sizeof(book)); } int cmp(int x,int y){ return x<y; } int main(){ int i,j,times; int x,y; char ch; while(~scanf("%d %d",&stu,&n)){ scanf("%d",×); init(); while(times--){ j=0; getchar(); scanf("%c",&ch); if(ch=='R'){ scanf("%d",&x); if(book[x]!=0){ printf("Return success\n"); for(i=1;i<=9;i++){ if(s[book[x]].t[i]==x) s[book[x]].t[i]=0; } s[book[x]].num--; book[x]=0; } else printf("The book is already in the library\n"); } else if(ch=='B'){ scanf("%d %d",&x,&y); if(book[y]!=0){ //这个地方一定得注意!因为这个WA了N次,题目说了 //这个有先后顺序的,先判断书在么,再判断该同学借了9本了没 printf("The book is not in the library now\n"); } else if(s[x].num==9){ printf("You are not allowed to borrow any more\n"); } else{ printf("Borrow success\n"); sort(s[x].t,s[x].t+10,cmp); s[x].t[1]=y; s[x].num++; book[y]=x; } } else{ scanf("%d",&x); sort(s[x].t,s[x].t+10,cmp); if(s[x].num==0) printf("Empty"); //cout<<"???"<<endl; if(s[x].num!=0){ for(i=1;i<=9;i++) if(s[x].t[i]!=0){ printf(j==0?"%d":" %d",s[x].t[i]); j++; } } printf("\n"); } } printf("\n"); } return 0; }