昨晚被dp搞的不轻、最气的是看题解都看不懂、
本想今天拿水题来练练手感、
结果我发现我错了、!!!
总结一下自己的错误把、 真希望错过的东西都不要在错了、
HDU 1070 Milk
题意:就是一个人去超市买牛奶、给你一些牛奶的牌子 价钱 容量,牛奶的保质期是6天、并且每天喝200ml,如果某种牛奶的容量小于200ml 这种牛奶直接就被拉黑了,并且保证所有的牛奶都是当日产的,要你求买那种牛奶最便宜,而且他只会买一瓶牛奶、上面给出的各种品牌的牛奶都是一瓶的价格容量,如果有多种牛奶同样便宜,要求输出容量大的、
思路:不难,但是题意说的很罗嗦,就是求每升牛奶的价格最低的那一个、 但是这里有个细节,就是那些容量超过1200ml的牛奶的处理,因为他只会喝1200ml 所以就算你容量再多也是多余的、 超过的部分直接舍去
1 #include<cstdio> 2 #include<cstring> 3 #include<cmath> 4 const int qq=150; 5 struct Milk 6 { 7 char s[150]; 8 int p; 9 int v; 10 }milk[qq]; 11 int partition(int l,int r) 12 { 13 int i,j; 14 Milk x=milk[l]; 15 i=l;j=r; 16 while(1){ 17 while(i<j && milk[j].v>=x.v) --j; 18 milk[i]=milk[j]; 19 while(i<j && milk[i].v<=x.v) ++i; 20 milk[j]=milk[i]; 21 if(i>=j) break; 22 } 23 milk[i]=x; 24 return i; 25 } 26 void quick(int l,int r) 27 { 28 if(l<r){ 29 int temp=partition(l,r); 30 quick(l,temp-1); 31 quick(temp+1,r); 32 } 33 } 34 int main() 35 { 36 int t;scanf("%d",&t); 37 while(t--){ 38 int n;scanf("%d",&n); 39 char str[150]; 40 int x,y;int count=0; 41 for(int i=0;i<n;++i){ 42 scanf("%s%d%d",str,&x,&y); 43 if(y<200) continue; 44 strcpy(milk[count].s,str); 45 milk[count].p=x; 46 milk[count++].v=y; 47 } 48 quick(0,count-1); //排序一下 从容量大往容量小去比较、 49 Milk cheap=milk[count-1]; 50 if(cheap.v>=1200) 51 cheap.v=1200; 52 for(int i=count-2;i>=0;--i){ 53 if(milk[i].v>=1200) 54 milk[i].v=1200; 55 if(cheap.p*1.0/cheap.v*1200>milk[i].p*1.0/milk[i].v*1200) 56 cheap=milk[i]; 57 } 58 printf("%s ",cheap.s); 59 } 60 return 0; 61 }
HDU 1062 Text Reverse
题意:就是将所有单词反转过来按英语作文的方式输出
这题有点坑阿、 我自己写了几种做法都WA了、 但是我就是不知道错在哪里、
先贴一个对的、 这种做法就直接对每一个单词进行输出
1 #include<cstdio> 2 #include<cstring> 3 #include<stack> 4 using namespace std; 5 char s[2000]; 6 int blank[1020]; 7 int main() 8 { 9 int t;scanf("%d",&t); 10 getchar(); 11 while(t--){ 12 memset(blank,0,sizeof(blank)); 13 gets(s); 14 int count=1; 15 blank[0]=-1; 16 int len=strlen(s); 17 s[len]=' '; 18 s[len+1]='