• 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 }

    这样就可以了

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

  • 相关阅读:
    Entity Framework开源了
    动态执行超过4000个字符的SQL
    微软针对Access提供了免费的SQL Server移植工具——SSMA
    网络采集库NCrawler
    使用WinSCP软件在windows和Linux中进行文件传输
    Open Source C# (Mono Compatible) Library for Sending Push Notifications To iOS (iPhone/iPad APNS), Android (C2DM), Windows Phone Apps
    Mono 2.11.3 发布包含微软的 Entity Framework
    谷歌发布 AngularJS 1.0,允许扩展HTML语法
    Accord.NET Framework
    CentOS源码编译安装Nginx和tcp_proxy module
  • 原文地址:https://www.cnblogs.com/sasuke-/p/5183007.html
Copyright © 2020-2023  润新知