• 2016年10月1日 训练 QAQ


    据说这是zld的题

    书写比赛

    【问题描述】
    最近,SZ 在高一各个班级都举行了书写比赛,具体内容是让同学们走上讲台在黑
    板上写下几段文字。
    现在,你所在的班级有 N 个人,座号分别为 1~N(即给定顺序),每个同学按座号
    顺序需要书写 S 段文字。 书写过程中, 每个人的速度是不一样的, 每个同学每个单位的
    时间可以书写 Vi 段文字,当一组上讲台的人中最慢的人完成书写,就轮到下一组继续
    书写。
    不幸的是,老教室的讲台陈年失修,当站在上面的同学的体重大于 W 的时候就会
    崩塌。每个同学的重量 Qi 是不同的,每次上台的人的重量和不能超过 W,除非你购买
    了平(zhe)安(shou)保险,否则你就要付出巨额赔款。
    现在, 你的班主任将这个重要的任务交付给了你, 要求你巧妙地在给定的顺序下安
    排分组,在总时间最短的情况下完成书写比赛。如果你成功地做出了这个方案,张璐老
    师保证你的班级将会获胜,你也会因此荣获“三好学生”称号。如果你无法制定出这个
    方案,你将被要求抄书。
    为了降低难度, 善良的 S.C.帮你向张璐老师提出申请只要求你输出最短的时间, 精
    确到小数点后两位 (四舍五入)即可。S.C.对你如此友好,你更应该完成这一道题,
    不要辜负 S.C.对你的希望。
    【输入格式】
    第一行,共三个数 W,S,N;
    接下来 N 行,按给定顺序,每行两个数 Qi 和 Vi,Vi、Qi 分别是第 i 号同学写
    字的速度(段/单位时间)和他的重量。
    【输出格式】
    仅一行,代表最短的时间,精确到小数点后两位。
    【输入 输出样例】
    800 300 4
    53 5.0
    59 3.0
    38 2.0
    69 2.0
    150.00
    【数据规模】
    对于 20%的数据,有 N ≤ 15;
    对于 100%的数据,有 N ≤ 2000 ; W, S ≤ 32767;
    本题保证 Q ≤ W。

    题解:f[i]表示第1到第i位同学的最小花费时间,易得f[i]=min(f[i],f[j-1]+时间花费)

     1 #include <iostream>
     2 #include <algorithm>
     3 #include <stdio.h>
     4 #include <cmath>
     5 #include <string>
     6 #include <string.h>
     7 #include <numeric>
     8 #define gc getchar()
     9 #define REM main
    10 using namespace std;
    11 int q[233333];
    12 double v[2333];
    13 double dp[233333];
    14 int read()
    15 {
    16     int xxxx=0,fuh=1;char ch=gc;
    17     while(!isdigit(ch)){
    18         if(ch=='-')fuh=-1;
    19         ch=gc;
    20     }
    21     while(isdigit(ch)){
    22         xxxx=(xxxx<<3)+(xxxx<<1)+ch-'0';ch=gc;
    23     }
    24     return xxxx*fuh;
    25 }
    26 int REM()
    27 {
    28     cin.sync_with_stdio(false);
    29     int w,s,n,i,j;
    30     cin>>w>>s>>n;
    31     for (i=1;i<=n;i++)
    32       {
    33         cin>>q[i]>>v[i];
    34         q[i]+=q[i-1];
    35          }
    36     for (i=1;i<=n;i++)
    37       {
    38          double yz=v[i];
    39         dp[i]=s/v[i]+dp[i-1];
    40         for (j=i;j>=1;j--)
    41             {
    42              yz=min(yz,v[j]);
    43             if (q[i]-q[j-1]<=w)
    44                 dp[i]=min(dp[i],s/yz+dp[j-1]);
    45             else break;
    46           }
    47       }
    48     printf("%.2lf",dp[n]);
    49     return 0;
    50 }
    QAQ

    灌水

    【问题描述】
    学霸 ZLD 是全年段同学 Orz 的对象,ZLD 告诉 S.C.在他小时候他的妈妈带他去
    测 IQ,结果显示他的 IQ 只有 70。显然,这只能说明出 IQ 测试题的医生弱爆了,ZLD
    大神不屑于去做这种水题。
    经过 S.C.的调查,S.C.觉得下面这件事足以证明 ZLD 大神 IQ 的高度:ZLD 小时
    候就很勤奋, 小学就已经有了相当的算法水平, 于是他家人决定给他一项艰巨而又有趣
    的任务。在 ZLD 的老家有一大片的田,ZLD 要把水灌到他的 N(1≤N≤1000)块农田,
    农田被数字 1 到 N 标记。把一块农田进行灌水有两种方法,一是从其他已经有水的农
    田引水;另外也可以在这块农田建造水池。在第 i 号农田内建造一个水池需要的花费为
    Wi(1≤Wi≤100100),连接两块农田需要花费 Pij(1≤Pij≤100100, Pij=Pji, Pii=0)。ZLD
    则要把这 N 片农田灌满水所需的最少费用求出来!
    结果自不必说, ZLD 把这个他认为的水题给虐爆了。 那么同样有志向成为神犇的你
    是不是也需要这道题来证明自己的实力呢?
    【输入格式】
    第一行是一个整数 N;
    接下来 N 行每行有一个数 Wi;
    第 N+2 行到第 2N+1 行每行有 N 个数用空格隔开, 第 N+1+i 行的第 j 个数代表 Pij。
    【输出格式】
    仅一行,输出最小费用。
    【输入 输出样例】
    4
    5
    4
    4
    3
    0 2 2 2
    2 0 3 3
    2 3 0 4
    2 3 4 0
    9
    【数据规模】
    对于 50%的数据,有 N ≤ 500;
    对于 100%的数据,有 N ≤ 1000。

    题解:我们额外建立一个点,和原有的点连边,边权为点权,然后做一遍最小生成树就好了。

     1 #include <iostream>
     2 #include <algorithm>
     3 #include <stdio.h>
     4 #include <cmath>
     5 #include <string>
     6 #include <string.h>
     7 #include <numeric>
     8 #define gc getchar()
     9 #define REM main
    10 using namespace std;
    11 int n,m;
    12 int fj[2000];
    13 struct node
    14 {
    15     int x,y,w;
    16 }a[2003];
    17 int father[2001];
    18 int find(int x)
    19 {
    20     return father[x]==x?x:father[x]=find(father[x]);
    21 }
    22 int read()
    23 {
    24     int xxxx=0,fuh=1;char ch=gc;
    25     while(!isdigit(ch)){
    26         if(ch=='-')fuh=-1;
    27         ch=gc;
    28     }
    29     while(isdigit(ch)){
    30         xxxx=(xxxx<<3)+(xxxx<<1)+ch-'0';ch=gc;
    31     }
    32     return xxxx*fuh;
    33 }
    34 /*int pow4(int a,int b)
    35 {
    36     int r=1,base=a;
    37     while(b!=0)
    38     {
    39         if(b&1)
    40             r*=base;
    41         base*=base;
    42         b>>=1;
    43     }
    44     return r;
    45 }*/
    46 bool cmp(node zy,node yz)
    47 {
    48     return zy.w<yz.w;
    49 }
    50 
    51 int REM()
    52 {
    53 
    54     int flag=0;
    55     int i,j;
    56     int temp;
    57     n=read();
    58     for (i=1;i<=n;i++)
    59       fj[i]=read(),father[i]=i;
    60     father[n+1]=n+1;
    61     for (i=1;i<=n;i++)
    62       for (j=1;j<=n;j++)
    63         {
    64           temp=read();
    65           if (i!=j)
    66           {
    67           a[++flag].x=i;
    68           a[flag].y=j;
    69           a[flag].w=temp;}
    70         }
    71     for (i=1;i<=n;i++)
    72       {
    73         a[++flag].x=n+1;
    74         a[flag].y=i;
    75         a[flag].w=fj[i];
    76       }
    77     sort(a+1,a+flag+1,cmp);
    78     int cnt=0;long long ans=0;
    79     for (i=1;i<=flag;i++)
    80       {
    81           int fx=find(a[i].x);
    82           int fy=find(a[i].y);
    83           if (fx!=fy)
    84             {
    85                 ans+=a[i].w;
    86                 cnt++;
    87                 father[fx]=fy;
    88             }
    89           if (cnt==n)
    90             break;
    91       }
    92     cout<<ans;
    93     return 0;
    94 }
    qwq

    礼物

    【问题描述】
    ZLD 蒟蒻以前只会泡汉子。 现在要开始泡妹子了。 但他不会, 于是他就只好请教小
    红如何泡妹子。
    由于最近是国庆节,小红收到了他的妹子的 N 个礼物,分别从 1~N 编号,但可恶
    的老鼠偷走了其中一个礼物。小红十分生气,他答应只要 ZLD 蒟蒻找到那个丢失的礼
    物的编号,他就传授 ZLD 蒟蒻泡妹子绝技。
    故事的结局是你帮助 ZLD 蒟蒻找到了礼物的编号,让他学会了如何泡妹子,所以
    你必须帮助 ZLD 蒟蒻找到那个丢了的礼物!
    【输入格式】
    第 1 行为一个正整数 N;
    接下来有 N-1 行,每行一个小红现在有的礼物编号。
    【输出格式】
    一行一个数字,为被可恶的老鼠偷走的礼物编号。
    【输入 输出样例】
    5
    2
    3
    1
    5
    4
    【数据规模】
    对于 30%的数据,满足 N≤500;
    对于 100%的数据,满足 N≤1500000。

    题解:算出1...n的和,然后一个个减掉就好了。但是这题略坑,北大zld学长给我们开2m内存。。不过不虚。QAQ

     1 #include <stdio.h>
     2 #define REM main
     3 using namespace std;
     4 
     5 int REM()
     6 {
     7     //freopen("gift.in","r",stdin);
     8     //freopen("gift.out","w",stdout);
     9     int n;
    10     scanf("%d",&n);
    11     int i,temp;
    12     long long gcy;
    13     gcy=((long long)n*(n+1))>>1;
    14     for (i=1;i<=n-1;i++)
    15       scanf("%d",&temp),gcy-=temp;
    16     printf("%lld",gcy);
    17     return 0;
    18 }
    23333

    今天题目好水但是我  写 狗 了。。

    QAQ

    Rem is my wife!(。・`ω´・)
  • 相关阅读:
    HTTP协议
    javascript常用数组排序及二分查找
    垃圾回收与内存管理
    js的数据存储机制和数据类型
    js中的深复制与浅复制
    斐波那契数列的实现
    认识python中的浅复制与深复制
    微信浏览器中弹窗高度适配
    “ 时,分,秒” 活动倒计时
    互联网协议
  • 原文地址:https://www.cnblogs.com/yz12138/p/5925862.html
Copyright © 2020-2023  润新知