テスト6.23 T1マインスイーパ

トピックの背景

タイトル説明

入力形式

出力フォーマット

サンプル入力と出力

データ範囲

解決

我々は2つのパラメータが不正行為をしている設定\((A_1、B_1)\ ) と\((A_2、B_2の)\)セット次に、
\ [S1 = \ FRAC {A_1 } {B_1}、S2 = \ FRAC { A_2} {B_2} \]
我々は両方の不正行為を選択した場合、それが得られたMaxtire時間
\ [S = \ FRAC {A_1
+ A_2} {B_1 + B_2} \] と仮定することができる\(S1 <S2 \ )、その後、
\ [S1-S2 = \ FRAC
{a_2b_1-a_1b_2} {b_1b_2}> 0 \ RIGHTARROW a_2b_1-a_1b_2> 0 \] ので
\ [S-S1 = \ FRAC {a_2b_1-a_1b_2} {(B_1 + B_2) B_1}> 0 \ RIGHTARROW S>
S1 \] 同様に利用可能な、\(S <S2 \)

類推すると、関係なく、私たちはいつものような形を見つけることを選択するか、\(\ FRAC {} {a_iを b_iを} \) 個々の最小スコアではありません。このスコアがすべてです\(a_iを/ b_i \)ソート最小。が最小値以上であり、さらに一緒に同じ値が複数の同一の可能性があるので、それはの最小値が設けられている\(m個\)番目、最後のプログラム番号は、
[C_m ^ 1 + C_m ^ \ 2 +します。 .. + C_m ^ M = 2 ^ M-1 \]

コード

#include <iostream>
#include <cstdio>
#include <iomanip>
#include <algorithm>
#include <cmath>
#define N 1000002
using namespace std;
const int mod=998442553;
const double eps=1e-10;
int t,n,i,cnt;
double a[N],b[N],c[N];
int poww(int a,int b)
{
    long long ans=1,base=a;
    while(b){
        if(b&1) ans=ans*base%mod;
        base=base*base%mod;
        b>>=1;
    }
    return ans%mod;
}
int main()
{
    freopen("mine.in","r",stdin);
    freopen("mine.out","w",stdout);
    cin>>t;
    while(t--){
        cin>>n;
        for(i=1;i<=n;i++) cin>>a[i];
        for(i=1;i<=n;i++) cin>>b[i];
        for(i=1;i<=n;i++) c[i]=b[i]/a[i];
        sort(c+1,c+n+1);
        if(c[1]<=1.0*10000){
            cnt=1,i=2;
            while(i<=n&&fabs(c[i]-c[1])<=eps) cnt++,i++;
            cout<<setprecision(8)<<fixed<<c[1]<<' '<<(poww(2,cnt)-1)%mod<<endl;
        }
        else cout<<"Impossible"<<endl;
    }
    fclose(stdin);
    fclose(stdout);
    return 0;
}

おすすめ

転載: www.cnblogs.com/LSlzf/p/11074923.html