Codeforces 1143

オリジナルリンク: http://www.cnblogs.com/BlogOfchc1234567890/p/10666816.html

1143 B

問題の意味

あなたは\(\ N-) 算出された(F(N)= N \ )\ 各デジタルを乗算した結果。\(N- \ ^ 9ル10 \)

入力
390
、出力
216
、入力
7
出力
7
入力
1000000000
出力
387420489

ソリューション

答えを更新するには、すべて9になるために右から左へ。

1143 C

問題の意味

あなたのツリーを付け、そこに彼らの祖先を尊重するためにいくつかのノードがあり、そして今あなたがステップ数を実行する、各ステップは、その祖先のためにその点を満たすためにポイントの最小数を削除するには、そのすべての子ノードは、(いないサブツリー)は、それを尊重します。出力ノードは、シーケンスを削除しました。-1出力シーケンスは空です。\(N- \ル。5 ^ 10 \)

入力
5
3 1
1 1
-1 0
1 2
3 0
出力
1 2 4
入力
5
-1 0
1 1
1 1
2 0
3 0
出力
-1
入力
8
2 1
-1 0
1 0
1 1
1 1
4 0
5 1
7 0
出力
5

ソリューション

削除したノードの後に任意のノードには影響ありません。
したがって、配列に出力することができる条件を満足するすべてのノードの初期状態を検索します。

1143 D

問題の意味

\(N * K \)からリング上のリングポイント\(1 \) すべての\(K \)ドットは、あなたが一方向に移動するたびに、レストランがあります\(Lの\)ポイント今、あなたは最初の位置と分からない\(Lの\)の値をしていますが、初期位置最寄りのレストラン距離を知っている\(\)を初めてした後、あなたは離れて最寄りの店舗から移動\(B \ )あなたは何回か、最小値とこの値の最大値を移動した後、出発点に戻ることができます。\(1 \ N-LE、K \ル100000,0 \ルA、B \ル\ KのFRAC} {2} {\)

入力
2 3
1 1
出力
1つの6
入力
3 2
0 0
出力
1 3
入力
1 10
5 3
出力
5

ソリューション

まず、私たちが厳選したときの最初のステップ\(A + 1 \)で。
そして、すべての可能な列挙\(のb \) 答えを計算し、更新を。
最初のステップとの回答の位置を計算する方法の第二段階では?
セット\(第一ステップのT =(位置-第二工程位置)\%(N×m個)
\) 、我々はどこへ行くのステップの数を見つける\(N-M * / \ GCD(T * N-M)\) 書かない(\ \ {テキスト} LCM(T * N-M)/ T \)を、)のunsigned long長い破裂します

コード

#include<bits/stdc++.h>
using namespace std;
template<typename tp>
void read(tp& x){
    x=0;
    char c=getchar();
    bool sgn=0;
    while((c<'0'||c>'9')&&c!='-')c=getchar();
    if(c=='-')sgn=1,c=getchar();
    while(c>='0'&&c<='9')x=(x<<3)+(x<<1)+c-'0',c=getchar();
    if(sgn)x=-x;
}
template<typename tp>
void write(tp x){
    if(x<0)putchar('-'),write(-x);
    else{
        if(x>=10)write(x/10);
        putchar(x%10+'0');
    }
}
typedef long long D;
D m,n,a,b;
D w(D x){return x?x:n*m;}
D gcd(D a,D b){return b==0?a:gcd(b,a%b);}
D solve(D x,D y){
    D t=w((y+n*m-x)%(n*m));
    D l=n*m/gcd(t,n*m);
    return l;
}
int main(){
    read(m),read(n),read(a),read(b);
    D mi=LLONG_MAX,mx=LLONG_MIN;
    for(D i=1,j=1+b,tmp;i<=m;i++,j+=n){
        tmp=solve(1+a,j);
        mi=min(mi,tmp);
        mx=max(mx,tmp);
    }
    for(D i=1,j=n+1-b,tmp;i<=m;i++,j+=n){
        tmp=solve(1+a,j);
        mi=min(mi,tmp);
        mx=max(mx,tmp);
    }
    write(mi),putchar(' '),write(mx);
    return 0;
}

1143 E

問題の意味

もし順列与える\(P \)と配列(\ \)を、ある\(T \) それぞれが間隔サブシーケンスがあるかどうか尋ねたグループクエリ\(P \)は巡回置換です。\(1≤| p型|、| A |、t≤2* 10 ^ 5 \)

入力
3 6 3
2 1 3
1 2 3 1 2 3
1 5
2 6
3 5
出力
110
入力
2 4 3
2 1
1 1 2 2
1 2
2 3
3 4
出力
010

ソリューション

処理\(\に)各要素\([i]が\)前駆\(PRE [I]が\) 前駆体配列に対応する値として定義される\([I] \)のを素子、及びこれを最も近い\([I] \)
\(DP [I] = DP
[プレ[I] + 1 \) 我々が形成され、森林見出さ
及び処理する必要性を\([I] \)上記セクション(\ \ N-)祖先は、また、アレイに保存し、倍増することができる\(S [i]が\)
クエリが要求し\([L、R] \ ) 区間が存在するかどうかを\(Iは\)ように\(S [I]> L = \) メンテナンスセグメントツリーまたは他のデータ構造。

1143 F

問題の意味

そこ平面\(N- \)点、どのように多くの異なった放物線を見つける\(Y ^ 2 = X + BX + C(B、R&LTにおけるC \)\) その上に厳密点を満たしていません。\(N- \ル。5 ^ 10 \)

入力
3
-1 0
0 2
1 0
出力
2
入力
5
1 0
1 -1
0 -1
-1 0
-1 -1
出力
1

ソリューション

まず、全ての点の座標を引いた横軸の正方形は
線形放物に縮退
費やす凸包メンテナンス
二つの同一点横座標注意文献決意

ます。https://www.cnblogs.com/BlogOfchc1234567890/p/10666816.htmlで再現

おすすめ

転載: blog.csdn.net/weixin_30540691/article/details/94937037