アルゴリズム:投票投票

タイトル

投票(投票)

  • 制限時間:他の言語でのC / C ++ 2秒、4秒
  • スペースの制限:C / C ++ 262144K、他の言語524288K
  • 64ビットIOフォーマット:%のLLD

タイトル説明

競合技術チームのリーダーで牛肉や牛の姉妹、彼の同僚は、秘密投票の活動を行ったそう。
牡牛座は、投票プロセスの間にN回スヌーピングよりも投票することができ、特別な能力を持って、i番目のてこ牛肉は姉がnである彼の票と牛の投票数の電流比を知ることができます:メートル、彼は投票の正確な数を詮索ことができませんでしたそれはあります。
スパイN回終了後、牡牛座は、彼が牛と妹の最小数は、得票の現在の数よりも、すべてのスヌープ結果を満たすの前提を知りたいですか?
アリスとボブは、技術グループリーダーのためのAの競争に従事している、どのすべての同僚のために今、それらの間の投票をしている。
アリスはNタイムズ。アットザI-TH時間のための投票結果を参照してくださいすることが可能であることを考えると、彼女は票を知ることですN-の割合でGOTに対するボブのAPOSがあります。投票のメートル、しかし、SHE CAN見ないが実際の量たびに。
彼女が見ているすべての比率が正確であることを考えると、n回を見た後、アリスは、その投票の最低限の金額を知りたいです。彼女とボブの両方の最大合計
入力説明:
入力ラインN + 1を含みます。
N(1≤N≤1000)整数第一正を行う
次にN行、それぞれ2つの正の整数をm行、N(M、n≤1000) 、 2つの素数を確保します。
入力\ mathit N + 1N + 1行を含みます。
1行目は、N(1≤N≤1000)整数正であり
そしてNラインは、2つの正の整数を含む各行に従うN、M
それはGCD(n_i、M_I)== 1gcd(NI、MI)== 1が保証されます。

出力説明:
投票の可能な最小数の出力との答えが10 ^ 18を超えていないことを確認してください。
出力合計ことを投票最小限の量の両方アリスとボブのアップが、答えが10 ^ 18を超えていないことが保証されます。

例1

输入
复制
3
2 3
1 1
3 2
输出
复制
10
说明
票数变化可能是:(2, 3) -> (3, 3) -> (6, 4),
所以最终的最小的票数之和为10。
the change of amount of votes can be : (2,3) -> (3, 3) -> (6, 4),
so the answer is 10.

例2

输入
4
1 1
1 1
1 5
1 100
输出
101

例3

输入
5
3 10
48 17
31 199
231 23
3 2
输出
6930

コードの実装

分析:MINX毎に算出は、最小、minYのyの最小値をxは。

  1. もし(x >= minX && y >= minY)そう直接割り当てminX = x; minY = y;
  2. それ以外の場合は、最大の割合を求めるMath.ceil(((double)1.0 * minX) / x)Math.ceil(((double)1.0 * minY) / y)小数がに存在する場合。Xと、yは最大倍率を乗じて得られます。割り当てミンクス、minYの。
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
       
        int n = in.nextInt();
        
        long minX = 0;
        long minY = 0;
        
        for(int i = 0; i < n;i++) {
          int x = in.nextInt();
          int y = in.nextInt();
          
          //write your code
          if (x >= minX && y >= minY) {
              minX = x;
              minY = y;
            } else {
              double mulX = 1;
              double mulY = 1;
              if (x > 0) {
                mulX = Math.ceil(((double)1.0 * minX) / x);
              }
              if (y > 0) {
                mulY = Math.ceil(((double)1.0 * minY) / y);
              }
              long mulMax = (long) Math.max(mulX, mulY);
              minX = Math.max(minX, x * mulMax);
              minY = Math.max(minY, y * mulMax);
            }
        }

    
        long result = minX + minY;
        System.out.print(result);
        
    }
}

問題は?

場合は、上記を介してアクセスすることができますが、いくつかのケースが終わっていない、私はどこに問題がわかりませんか?場合は、コメントがその助けを、提供していない問題がどこにあるか知っています。ありがとう
ここに画像を挿入説明

参照

https://ac.nowcoder.com/acm/contest/3286/B

公開された127元の記事 ウォン称賛12 ビュー20000 +

おすすめ

転載: blog.csdn.net/zgpeace/article/details/103468086