• 8月7日小练


    网址:CSUST练习2

    这次的小练是我们这组出的题,我出了3道:A,C,DTeilwal出了一道:B,从此不再 出了一道:E,然后这次题目在群里遭到几乎全体的吐槽.....Orz......都是英文题,而且都很长.....这绝对是巧合!恩,巧合~╮(╯▽╰)╭

    Monkey and Banana   HDU 1069

    猴子要摘香蕉,有N种箱子,分别给出长宽高,每种箱子有无限个,要求下面那个箱子的长宽要比上面那个大,求最高的高度。

    代码:     0MS     其实就是一个排序&LIS

     1 #include<stdio.h>
     2 #include<iostream>
     3 #include<string.h>
     4 #include<algorithm>
     5 using namespace std;
     6 int ma(int x,int y)
     7 {
     8  return x>y?x:y;
     9 }
    10 struct lmx
    11 {
    12  int l;
    13  int w;
    14  int h;
    15 };
    16 lmx lm[500];
    17 bool is(lmx s,lmx t)
    18 {
    19  return s.l*s.w>t.l*t.w;
    20 }
    21 int p[100];
    22 int main()
    23 {
    24     int m,n,p1,test,i,cnt,j,maxi,ca=0;
    25     while(scanf("%d",&test)&&test)
    26  {
    27    cnt=0;
    28    ca++;
    29    memset(p,0,sizeof(p));
    30    for(i=0;i<test;i++)
    31    {
    32     scanf("%d%d%d",&m,&n,&p1);
    33     lm[cnt].l=m;  //转换长宽高
    34     lm[cnt].w=n;
    35     lm[cnt].h=p1;
    36     cnt++;
    37     lm[cnt].l=m;
    38     lm[cnt].w=p1;
    39     lm[cnt].h=n;
    40     cnt++;
    41     lm[cnt].l=n;
    42     lm[cnt].w=m;
    43     lm[cnt].h=p1;
    44     cnt++;
    45     lm[cnt].l=n;
    46     lm[cnt].w=p1;
    47     lm[cnt].h=m;
    48     cnt++;
    49     lm[cnt].l=p1;
    50     lm[cnt].w=n;
    51     lm[cnt].h=m;
    52     cnt++;
    53     lm[cnt].l=p1;
    54     lm[cnt].w=m;
    55     lm[cnt].h=n;
    56     cnt++;
    57    }
    58     sort(lm,lm+cnt,is);
    59     for(i=0;i<cnt;i++)
    60         p[i]=lm[i].h;    //记录高度
    61     maxi=p[0];
    62     for(i=1;i<cnt;i++)
    63          for(j=0;j<i;j++)
    64             if(lm[i].l<lm[j].l&&lm[i].w<lm[j].w)   //一个箱子的长宽比一个小
    65              {
    66                if(p[i]<p[j]+lm[i].h)
    67                  p[i]=p[j]+lm[i].h;
    68                if(p[i]>maxi)    //更新最大值
    69                 maxi=p[i];
    70              }
    71    printf("Case %d: maximum height = ",ca);
    72    printf("%d
    ",maxi);
    73  }
    74  return 0;
    75 }

    B  Prison rearrangement    POJ 1636

    还是不是很懂这道题,传说是DFS&DP

    代码:

     1 #include<iostream>
     2 using namespace std;
     3 bool map[205][205],s1[205],s2[205],dp[205][205];int n,m,l,r;
     4 void dfs(int x,int temp)
     5 {
     6  int i;
     7  if(temp==1)
     8   s1[x]=true;   //标记
     9  else
    10   s2[x]=true;  //标记
    11  if(temp==1)    //A牢
    12  {
    13   r++;
    14   for(i=1;i<=n;i++)   
    15    if(map[i][x]&&!s2[i])   //地图被标记&&s2[]未被标记
    16     dfs(i,2);   //搜索B牢
    17  }
    18  else    //B牢
    19  {
    20   l++;
    21   for(i=1;i<=n;i++)
    22    if(map[x][i]&&!s1[i])
    23     dfs(i,1);
    24  }
    25 }
    26 int main()
    27 {
    28  int N,i,j,x,y,k;
    29  cin>>N;
    30  while(N--)
    31  {
    32   cin>>n>>m;
    33   memset(map,false,sizeof(map));
    34   memset(dp,false,sizeof(dp));
    35   memset(s1,false,sizeof(s1));
    36   memset(s2,false,sizeof(s2));
    37   for(i=1;i<=m;i++)
    38   {
    39    cin>>x>>y;
    40    map[x][y]=true;
    41   }
    42   dp[0][0]=true;
    43   for(i=1;i<=n;i++)
    44   {
    45    if(s1[i])
    46     continue;
    47    l=0;r=0;
    48     dfs(i,1);
    49    for(j=n/2;j>=l;j--)
    50     for(k=n/2;k>=r;k--)
    51      if(dp[j-l][k-r])
    52       dp[j][k]=true;
    53   }
    54   for(i=1;i<=n;i++)
    55   {
    56    if(s2[i])
    57     continue;
    58    l=0;r=0;
    59     dfs(i,2);
    60    for(j=n/2;j>=l;j--)
    61     for(k=n/2;k>=r;k--)
    62      if(dp[j-l][k-r])
    63       dp[j][k]=true;
    64   }
    65   for(i=n/2;i>=0;i--)
    66    if(dp[i][i])
    67     break;
    68         printf("%d
    ",i);
    69   
    70  }
    71  return 0;
    72    
    73 }

    C   Design T-Shirt   HDU 1031

    这题其实很简单,主要是理解题意&灵活运用结构体,题目大意是,有个设计师想设计粗大家满意度最高的T-shirt,给出N个人,M个设计方案,选K种,再给出每个人对每种设计的满意度,输出最好的K个的编号,要求逆序输出编号。

    代码:      78MS

     1 #include <stdio.h>
     2 #include <iostream>
     3 #include <algorithm>
     4 using namespace std;
     5 double a[1000][10005];
     6 int c[10005];
     7 class A
     8 {
     9 public:
    10     double sum;
    11     int num;
    12 }b[10005];
    13 int cmp(A i,A j)
    14 {
    15     return i.sum>j.sum;
    16 }
    17 int main()
    18 {
    19     int m,n,k,i,j;
    20     while(~scanf("%d%d%d",&m,&n,&k))
    21     {
    22         for(i=0;i<m;i++)
    23             for(j=0;j<n;j++)
    24                 scanf("%lf",&a[i][j]);   //输入注意是double 
    25         for(i=0;i<n;i++)
    26         {
    27             b[i].num=i;
    28             b[i].sum=0;
    29             for(j=0;j<m;j++)
    30                 b[i].sum+=a[j][i];    //每一种设计的总分
    31         }
    32         sort(b,b+n,cmp);    //分数排序
    33         for(i=0;i<k;i++)
    34             c[i]=b[i].num;
    35         sort(c,c+k);   //编号排序
    36         for(i=k-1;i>0;i--)   //逆序输出
    37             printf("%d ",c[i]+1);
    38         printf("%d
    ",c[0]+1);
    39     }
    40     return 0;
    41 }

    D   Wooden Sticks   HDU 1051

    这道题和LIS专场里的俄罗斯套娃很像,只不过这里同样的质量&长度可以放一起,所以,在排序的时候从大到小排序,在x相等的时候,y也是从大到小排序。

    代码:         15MS

     1 #include <stdio.h>
     2 #include <iostream>
     3 #include <algorithm>
     4 using namespace std;
     5 class A
     6 {
     7 public:
     8     int x;   //质量
     9     int y;   //长度
    10     int map;   //标记
    11 }a[5005];
    12 int cmp(A i,A j)
    13 {
    14     if(i.x==j.x)
    15         return i.y>j.y;
    16     else
    17         return i.x>j.x;
    18 }
    19 int main()
    20 {
    21     int T,number,i,j,n;
    22     scanf("%d",&T);
    23     while(T--)
    24     {
    25         number=0;
    26        scanf("%d",&n);
    27        for(i=1;i<=n;i++)
    28        {
    29          scanf("%d%d",&a[i].x,&a[i].y);
    30          a[i].map=0;   //清零
    31         }
    32         int maxx;
    33         sort(a+1,a+1+n,cmp);   //排序
    34         for(i=1;i<=n;i++)
    35         if(a[i].map==0)
    36         {
    37             number++;
    38             a[i].map=1;
    39             maxx=a[i].y;
    40             for(j=i+1;j<=n;j++)
    41                 if(a[j].map==0&&a[j].y<=maxx)
    42                 {
    43                     a[j].map=1;
    44                     maxx=a[j].y;
    45                 }
    46         }
    47         printf("%d
    ",number);
    48     }
    49     return 0;
    50 }

    E   Cable master   HDU 1551

    这道题就是个坑!!!!!天坑!!!!!!尼玛,我要他(从此不再)出道二分的题,居然出了这道神二分!!!!!!!!!题目并不难,只!是!压根看不懂题......

    请容我再这详细讲下题......Orz

    需要K根长度相等的电缆线  从已有的N条电缆线中剪切得来  求最长能获得多长的电缆线<-----------就是这样了.......

    代码:    156 MS

     1 #include <stdio.h>
     2 #include <iostream>
     3 #include <algorithm>
     4 using namespace std;
     5 int main()
     6 {
     7     int i;
     8     double mid,l,r,sum=0;
     9     int m,n,y;
    10     double a[10005];
    11     while(~scanf("%d%d",&m,&n)&&m&&n)
    12     {
    13         sum=0;
    14         for(i=0;i<m;i++)
    15         {
    16             scanf("%lf",&a[i]);
    17             sum+=a[i];    //求和....
    18         }
    19         if(sum<n)    //绳子不够长》。。。
    20             printf("0.00
    ");
    21         else
    22         {
    23             l=0;
    24             r=sum/n;
    25             mid=0;
    26             while(r-l>1e-9)
    27             {
    28                 y=0;    //y要为整型.....因为绳子没有半根.....
    29                 mid=(l+r)/2;
    30                 for(i=0;i<m;i++)
    31                     y+=a[i]/mid;
    32                 if(y<n)
    33                     r=mid;
    34                 if(y>=n)    //最坑爹的是这,这个=一定要放着才会对~!!!!!但是二分部应该随意放哪都可以么。。。。。
    35                     l=mid;
    36 
    37             }
    38         }
    39         printf("%.2lf
    ",mid);
    40     }
    41     return 0;
    42 }
  • 相关阅读:
    Python 的 Pandas 对矩阵的行进行求和
    python 统计字符串中指定字符出现次数的方法
    Python 2 代码转 Python 3的一些转化
    Python 的文件保存路径
    Pycharm 个人认为舒服漂亮又好用的主题风格
    【RS】Collaborative Memory Network for Recommendation Systems
    MATLAB 条形图添加多个图例
    MATLAB 画柱状图(/直方图)修改横坐标名称并使其横着显示
    Nexus3.X 将Maven项目上传至nexus私服
    nexus maven 使用案例
  • 原文地址:https://www.cnblogs.com/riddle/p/3246921.html
Copyright © 2020-2023  润新知