• AIM Tech Round (Div. 2)


    A. Save Luke

    题意:给一个人的长度d,然后给一个区间长度0~L,给你两个子弹的速度v1,v2,两颗子弹从0和L向中间射去(其实不是子弹,是一种电影里面那种绞牙机之类的东西就是一个人被困在里面了,两边有着那种尖刺的墙向中间靠拢的那种)问Luke能存活的最长时间

    思路:看代码吧,简单易懂

     1 #include<cstdio>
     2 #include<cmath>
     3 int main()
     4 {
     5     int d,l,v1,v2;
     6     while(scanf("%d%d%d%d",&d,&l,&v1,&v2)!=EOF)
     7     {
     8         printf("%.6lf
    ",(l-d)*1.0/(v1+v2));
     9     }
    10 }

    B. Making a String

    题意:26个字母组成的串,给你字母的数量和每个字母可以放的数量,组成串的时候有一定规则:

    1.串中每个字母的数量不能多于给定的数量

    2.串中每个字母出现的次数都不同

    问组成的最长串是多少。

    思路:因为涉及的是不同的元素,所以用set来做,

    先贴一个WA在第20组数据的代码

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<cmath>
     4 #include<algorithm>
     5 #include<set>
     6 using namespace std;
     7 long long num[30],sum[30];
     8 int main()
     9 {
    10     int n;
    11     while(scanf("%d",&n)!=EOF)
    12     {    
    13         set<long long>p;
    14         long long tot=0;
    15         for(int i=0;i<n;++i)
    16             scanf("%lld",&num[i]);
    17         sort(num,num+n);
    18         for(int i=n-1;i>=0;--i){
    19             while(p.find(num[i])!=p.end()){
    20                 num[i]-=1;
    21             }
    22             p.insert(num[i]);
    23             tot+=num[i];
    24         }
    25         printf("%lld
    ",tot);
    26     }
    27 }

    这个代码呢,在while循环中num[i]可能减为负数,所以输入3 1 1 1 答案本来是1的但输出来是0

    所以要对负数做一个判断

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<cmath>
     4 #include<algorithm>
     5 #include<set>
     6 using namespace std;
     7 long long num[30],sum[30];
     8 int main()
     9 {
    10     int n;
    11     while(scanf("%d",&n)!=EOF)
    12     {    
    13         set<long long>p;
    14         long long tot=0;
    15         for(int i=0;i<n;++i)
    16             scanf("%lld",&num[i]);
    17         sort(num,num+n);
    18         for(int i=n-1;i>=0;--i){
    19             while((p.find(num[i])!=p.end())){
    20                 num[i]-=1;
    21             }
    22             if(num[i]<0)    num[i]=0;
    23             p.insert(num[i]);
    24             tot+=num[i];
    25         }
    26         printf("%lld
    ",tot);
    27     }
    28 }

    这样就可以了

    错误代码贴这里是为了提醒自己针对一个问题针对自己的代码要做到没有漏洞可以找、

  • 相关阅读:
    Mbs Framework 简介
    回应老赵: 适合C# Actor的消息执行方式 中看也中用的解决方案
    Mini 容器学习笔记5—— 组件的获取
    JS控制文本框只能输入N个字符.
    【转】外挂编写原理
    【转】集合小节
    CSS样式的filter(滤镜效果)
    系统变量(%SystemRoot% ,%windir% ,%temp%,%system%)的表示方法
    客户端调用服务器控件
    Flash MX 认证考试(样题)
  • 原文地址:https://www.cnblogs.com/sasuke-/p/5183007.html
Copyright © 2020-2023  润新知