zoukankan      html  css  js  c++  java
  • 9/21 越努力越幸运-思维赛(4.0) 解题思路

    A

    题意:有两种水为1升和2升,给出这两种水的价格和要买的水的升数,求刚好买所需的升数花的最少钱

    解题思路:判断水的奇偶和2升水价格的奇偶性,列出相应计算式

     1 #include<stdio.h>
     2 #include<math.h>
     3 #include<iostream>
     4 #include<algorithm>
     5 using namespace std;
     6 int main()
     7 {
     8     long long q,n,a,b,minn;
     9     while(cin>>q)
    10     {
    11         while(q--)
    12         {
    13             cin>>n>>a>>b;
    14             minn=a*n;
    15             if(n%2==0)
    16             {
    17                 if(b%2==0)
    18                 {
    19                     minn=min(minn,b/2*n);
    20                 }
    21                 else
    22                 {
    23                     minn=min(minn,n/2*b);
    24                 }
    25             }
    26             else
    27             {
    28                 if(b%2==0)
    29                 {
    30                     minn=min(minn,b/2*(n-1)+a);
    31                 }
    32                 else
    33                 {
    34                     minn=min(minn,b*(n/2)+a);
    35                 }
    36             }
    37             cout<<minn<<endl;
    38         }
    39     }
    40   return 0;
    41 }
    View Code

    B

    题意:给一个数组,数组中的数都是2的次方,两个相同的数可以相加重新存入数组,判断能否出现2048

    解题思路:进行桶排序和建立新数组存相加后的数组,循环进行

     1 #include<stdio.h>
     2 #include<math.h>
     3 #include<iostream>
     4 #include<algorithm>
     5 using namespace std;
     6 int main()
     7 {
     8     int q,n,a[10000],i,b[10000];
     9     cin>>q;
    10     while(q--)
    11     {
    12         cin>>n;
    13         for(i=0;i<n;i++)
    14             cin>>a[i];
    15         for(i=0;i<10000;i++)
    16             b[i]=0;
    17         for(i=0;i<n;i++)
    18         {
    19            if(a[i]<=2048)
    20             b[a[i]]++;
    21         }
    22         int flag=0;
    23         for(i=1;i<=1024;i++)
    24         {
    25            while(b[i]>1)
    26            {
    27                b[i*2]++;
    28                b[i]=b[i]-2;
    29            }
    30         }
    31        if(b[2048])
    32         cout<<"YES"<<endl;
    33       else
    34         cout<<"NO"<<endl;
    35     }
    36   return 0;
    37 }
    View Code

    C

    题意:给一个数组,从数组中依次去掉一个数,判断剩下的奇数和偶数和是否相等

    解题思路:先求出不去之前的奇偶之和,然后依次扫描数组,i代表去掉第i个数

    奇数和=(i之前的奇数和+i之后的偶数和)

    偶数和=(i之前的偶数和+i之后的奇数和)

     1 #include<stdio.h>
     2 #include<math.h>
     3 #include<iostream>
     4 #include<algorithm>
     5 using namespace std;
     6 int main()
     7 {
     8   long long n;
     9   int a[200010],i,sum1=0,sum2=0,x=0;
    10   while(cin>>n)
    11   {
    12     for(i=1;i<=n;i++)
    13         cin>>a[i];
    14     for(i=1;i<=n;i++)
    15     {
    16         if(i%2!=0)
    17              sum1+=a[i];
    18         else
    19             sum2+=a[i];
    20     }
    21     int newsum1=0,newsum2=0;
    22     for(i=1;i<=n;i++)
    23     {
    24         if(i%2!=0)
    25         {
    26             sum1-=a[i];
    27             if(sum1+newsum2==sum2+newsum1)
    28                 x++;
    29             newsum1+=a[i];
    30         }
    31         else
    32         {
    33             sum2-=a[i];
    34             if(sum2+newsum1==sum1+newsum2)
    35                 x++;
    36             newsum2+=a[i];
    37         }
    38     }
    39     cout<<x<<endl;
    40   }
    41   return 0;
    42 }
    View Code

    E

    题意:一个ICPC队需要三个人才能组队成功,其中必须要有coder and mathematician,给三个数代表三种人的个数,求最多能组成多少个队

    解题思路:比较coder and mathematician和三个数之和/3的最小值即为所求

     1 #include<stdio.h>
     2 #include<math.h>
     3 #include<iostream>
     4 #include<algorithm>
     5 using namespace std;
     6 int main()
     7 {
     8   int q,c,m,x,ans=0,minn;
     9   cin>>q;
    10   while(q--)
    11   {
    12       cin>>c>>m>>x;
    13       minn=c;
    14       if(c+m+x<3)
    15         cout<<"0"<<endl;
    16       else
    17       {
    18           minn=min(minn,m);
    19           minn=min(minn,(c+m+x)/3);
    20           cout<<minn<<endl;
    21       }
    22   }
    23   return 0;
    24 }
    View Code
  • 相关阅读:
    初识Opserver,StackExchange的监控解决方案
    html input readonly 和 disable的区别
    css3制作优惠券
    C#判断用户是否使用微信浏览器,并据此来显示真实内容或二维码
    通过userAgent判断手机浏览器类型
    history.js使用方法(来自博客园)
    搭建可调试的微信公众平台本地测试环境
    Entity Framework中编辑时错误ObjectStateManager 中已存在具有同一键的对象
    c# List<int> 转 string 以及 string [] 转 List<int>
    C#中的lock关键字
  • 原文地址:https://www.cnblogs.com/xiao20000605/p/11626861.html
Copyright © 2011-2022 走看看