zoukankan      html  css  js  c++  java
  • 洛谷 P1080 国王游戏

    题目描述

    恰逢 H国国庆,国王邀请n 位大臣来玩一个有奖游戏。首先,他让每个大臣在左、右手上面分别写下一个整数,国王自己也在左、右手上各写一个整数。然后,让这 n 位大臣排成一排,国王站在队伍的最前面。排好队后,所有的大臣都会获得国王奖赏的若干金币,每位大臣获得的金币数分别是:排在该大臣前面的所有人的左手上的数的乘积除以他自己右手上的数,然后向下取整得到的结果。

    国王不希望某一个大臣获得特别多的奖赏,所以他想请你帮他重新安排一下队伍的顺序,使得获得奖赏最多的大臣,所获奖赏尽可能的少。注意,国王的位置始终在队伍的最前面。

    输入输出格式

    输入格式:

    第一行包含一个整数n,表示大臣的人数。

    第二行包含两个整数 a和 b,之间用一个空格隔开,分别表示国王左手和右手上的整数。

    接下来 n行,每行包含两个整数a 和 b,之间用一个空格隔开,分别表示每个大臣左手和右手上的整数。

     

    输出格式:

    一个整数,表示重新排列后的队伍中获奖赏最多的大臣所获得的金币数。

    输入输出样例

    输入样例#1: 
    3 
    1 1 
    2 3 
    7 4 
    4 6 
    输出样例#1: 
    2

    说明

    【输入输出样例说明】

    1、2、3 这样排列队伍,获得奖赏最多的大臣所获得金币数为 2;

    按 13、2 这样排列队伍,获得奖赏最多的大臣所获得金币数为2;

    按 21、3 这样排列队伍,获得奖赏最多的大臣所获得金币数为 2;

    23、1这样排列队伍,获得奖赏最多的大臣所获得金币数为9

    按 3、12这样排列队伍,获得奖赏最多的大臣所获得金币数为 2;

    32、1 这样排列队伍,获得奖赏最多的大臣所获得金币数为 9。

    因此,奖赏最多的大臣最少获得 2个金币,答案输出 2。

    【数据范围】

    对于 20%的数据,有 1≤ n≤ 10,0 < a,b < 8

    对于 40%的数据,有1≤ n≤20,0 < a,b < 8

    对于 60%的数据,有 1≤ n≤100

    对于 60%的数据,保证答案不超过 10^9

    对于 100%的数据,有 1 ≤ n ≤1,000,0 < a,b < 10000

    NOIP 2012 提高组 第一天 第二题

    解题思路:

    经过一番推论后,我们可以得出让右手和左手乘积小的在前面,答案最优,但是要注意,本题数据很大,要用高精度。

    AC代码:

     1 #include<cstdio>
     2 #include<algorithm>
     3 #include<cstring>
     4 using namespace std;
     5 int n,lens = 1,lenm = 1,lena = 1;
     6 int ans[10010],maxn[10010] = {0,1},sum[10010] = {0,1};
     7 struct kkk {//记录大臣手上的数 
     8     long long l,r;
     9 }e[1001];
    10 void gjc(long long k) {//算出当前大臣左手的数和前面所有大臣左手乘积的乘积 
    11     int num = 0;
    12     for(int i = 1;i <= lens; i++)
    13         sum[i] *= k;
    14     for(int i = 1;i <= lens; i++) {
    15         num += sum[i];
    16         sum[i] = num % 10;
    17         num /= 10;
    18     }
    19     while(num != 0) {
    20         lens++;
    21         sum[lens] = num % 10;
    22         num /= 10;
    23     }
    24 }
    25 void he(long long k) {//求出当前大臣所获得的奖赏 
    26     memset(ans,0,sizeof(ans));
    27     lena = lens;
    28     int num = 0;
    29     for(int i = lena;i >= 1; i--) {
    30         num *= 10;
    31         num += sum[i];
    32         if(num >= k) {
    33             ans[i] = num / k;
    34             num %= k;
    35         }
    36     }
    37     while(ans[lena] == 0) {
    38         if(lena == 1)
    39             break;
    40         lena--;
    41     }
    42 }
    43 bool cmp(kkk a,kkk b) {//将左右手乘积小的放前面 
    44     return a.l * a.r < b.l * b.r;
    45 }
    46 void max() {//找获得奖赏最多的大臣 
    47     if(lena > lenm) {
    48         for(int i = 1;i <= lena; i++)
    49             maxn[i] = ans[i];
    50         lenm = lena;
    51     }
    52     else if(lena == lenm) {
    53         for(int i = lena;i >= 1; i--)
    54             if(maxn[i] < ans[i]) {
    55                 for(int j = 1;j <= lena; j++)
    56                     maxn[j] = ans[j];
    57                 lenm = lena;
    58                 break;
    59             }
    60     }
    61 }
    62 int main() {
    63     scanf("%d",&n);
    64     scanf("%lld%lld",&e[0].l,&e[0].r);//输入国王左右手上的数 
    65     for(int i = 1;i <= n; i++)
    66         scanf("%lld%lld",&e[i].l,&e[i].r);//输入大臣手上的数 
    67     sort(e+1,e+n+1,cmp);//排序 
    68     for(int i = 1;i <= n; i++) {
    69         gjc(e[i - 1].l);
    70         he(e[i].r);
    71         max();
    72     }
    73     for(int i = lenm;i >= 1; i--)
    74         printf("%d",maxn[i]);//输出答案 
    75     return 0;
    76 } 

     //NOIP提高 2012 Day1 T2

  • 相关阅读:
    Effective Java 03 Enforce the singleton property with a private constructor or an enum type
    Effective Java 02 Consider a builder when faced with many constructor parameters
    Effective Java 01 Consider static factory methods instead of constructors
    sencha touch 手势识别左右滑动
    sencha touch textarea 手机上不显示滚动条,且不能滚动
    IBM Worklight OutOfMemoryError: Java heap space 错误
    shopnc-setNcCookie-后台验证码
    shonc-聊天im工具配置
    ecstore开启发送邮件日志,并且排查邮件发布出去原因
    php上传导入文件 nginx-502错误
  • 原文地址:https://www.cnblogs.com/lipeiyi520/p/10421715.html
Copyright © 2011-2022 走看看