zoukankan      html  css  js  c++  java
  • 水题水一波、

    昨晚被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]='';
    19           for(int i=0;i<=strlen(s);++i)
    20               if(s[i]==' ')
    21                   blank[count++]=i;
    22           for(int i=1;i<count;++i){
    23               for(int j=blank[i]-1;j>=blank[i-1]+1&&s[j]!=' ';--j)  // 不加s[j]!=' ' 会WA,我也不知道为什么
    24                   printf("%c",s[j]);                    // 我自己想是觉得不用加的、
    25               if(i!=count-1)    printf(" ");
    26         }
    27         printf("
    ");
    28     }
    29     return 0;
    30 }

    HDU 1019 Least Common Multiple

    这题是真的水、 一发A了、 只需要注意数据不溢出就行了、  那么就先进行除法嘛

    题意:求多个数的最大公倍数、

    思路:你想想如果你能求出其中两个数的最大公倍数、那么n个数的最大公倍数是肯定大于等于这两个数的最大公倍数的、

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<cmath>
     4 #include<algorithm>
     5 using namespace std;
     6 const int qq=50000;
     7 int gcd(int a,int b)
     8 {
     9     return b==0?a:gcd(b,a%b);
    10 }
    11 int num[qq];
    12 int main()
    13 {
    14     int t;scanf("%d",&t);
    15     while(t--){
    16         int n;scanf("%d",&n);
    17         for(int i=0;i<n;++i)
    18             scanf("%d",&num[i]);
    19         if(n==1){
    20             printf("%d
    ",num[0]);
    21             continue;
    22         }
    23         if(num[0]<num[1]){
    24             num[0]=num[0]+num[1];
    25             num[1]=num[0]-num[1];
    26             num[0]=num[0]-num[1];
    27         }
    28         int maxn=num[0]/gcd(num[0],num[1])*num[1];
    29         for(int i=2;i<n;++i){
    30             if(num[i]>maxn)    maxn=max(maxn,maxn/gcd(num[i],maxn)*num[i]);
    31             else            maxn=max(maxn,maxn/gcd(maxn,num[i])*num[i]);
    32         }
    33         printf("%d
    ",maxn);
    34     }
    35 }
  • 相关阅读:
    【洛谷P3469】[POI2008]BLO-Blockade
    【洛谷P3225】[HNOI2012]矿场搭建
    【洛谷P4568】[JLOI2011]飞行路线
    读入优化与输出优化模板
    7.29NOIP模拟赛
    【洛谷P3627】[APIO2009]抢掠计划
    【洛谷P1582】倒水
    运lucky
    【数据结构】浅谈倍增求LCA
    【题解】洛谷P4180 [BJWC2010] 严格次小生成树(最小生成树+倍增求LCA)
  • 原文地址:https://www.cnblogs.com/sasuke-/p/5361041.html
Copyright © 2011-2022 走看看