我不能接受
查看原帖
我不能接受
88735
寒鸽儿楼主2021/9/10 03:30

RT,我的代码(应该,如果我没有手残或者眼花的话),应该和大部分题解一样是 O(n2LlogM)\mathcal{O}(n^2L \log M) 的。
姑且所说的“虽然复杂度看上去挺离谱但是跑的飞快”是真的,但是为什么我的就T了呢嘤嘤嘤。
不开O2 80pts,开了90pts 呜呜呜。
看了几遍代码大概没什么问题(?,感觉有点不能接受.jpg 麻烦大伙看看咱这次有没有sb qwq。

#include <bits/stdc++.h>
#define rep(i,a,b) for(int i=(a);i<=(b);++i)
#define per(i,a,b) for(int i=(a);i>=(b);--i)
#define repp(i,a,b) for(int i=(a);i<(b);++i)
#define perr(i,a,b) for(int i=(a);i>(b);--i)

using namespace std;

const int maxn = 20;
int C[ maxn ], P[ maxn ], L[ maxn ];

inline void exgcd( int a, int b, int &x, int &y, int &g ) {
    if( !b ) {
        x = 1; y = 0; g = a;
        return ;
    }
    exgcd( b, a % b, y, x, g );
    y -= a / b * x;
}

inline bool check( int x, int y, int M ) {
    int a = P[ x ] - P[ y ], b = M, c = C[ y ] - C[ x ], X, Y, g;
    exgcd( a, b, X, Y, g );
    if( c % g ) return false;
    b /= g; c /= g;
    X = ( X * c % b + abs( b ) ) % b;
    return X <= min( L[ x ], L[ y ] );
}

int main (  ) {
    if( fopen( "yl.in", "r" ) ) {
        freopen( "yl.in", "r", stdin );
        freopen( "yl.out", "w", stdout );
    }
    ios::sync_with_stdio( false );
    cin.tie( NULL );
    int n, st = 0;
    cin >> n;
    rep( i,1,n ) cin >> C[ i ] >> P[ i ] >> L[ i ], st = max( st, C[ i ] );
    rep( m,st,1e6 ) {
        bool flg = true;
        rep( i,1,n ) rep( j,i+1,n )
            if( check( i, j, m ) ) {
                flg = false;
                break;
            }
        if( flg ) {
            cout << m << '\n';
            break;
        }
    }
    return 0;
}
2021/9/10 03:30
加载中...