QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#617692#9434. Italian CuisineEmotion_ZWA 0ms3608kbC++202.4kb2024-10-06 16:41:012024-10-06 16:41:02

Judging History

你现在查看的是最新测评结果

  • [2024-10-06 16:41:02]
  • 评测
  • 测评结果:WA
  • 用时:0ms
  • 内存:3608kb
  • [2024-10-06 16:41:01]
  • 提交

answer

#include <bits/stdc++.h>

using namespace std;

#define int __int128
#define deg( x ) cerr<<""#x"="<<x<<endl
#define endl '\n'

const int N=1e5+10;

istream &operator>>( istream &in , __int128 &n ){
    string s; in>>s;
    n=0;

    for(char i:s) n=n*10+i-'0';

    return in;
}

ostream &operator<<( ostream &out , __int128 n ){
    if( n==0 ){
        out<<0;
        return out;
    }

    string s;

    while( n ){
        s+='0'+n%10;
        n/=10;
    }
    reverse( s.begin( ) , s.end( ) );
    out<<s;
    return out;
}

struct node{
    int x , y;
};

node A[ N ];

int abss( int x ){
    if( x<0 ) x=-x;
    return x;
}

int cross( node a , node b , node c ){
    return ( b.x-a.x )*( c.y-a.y )-( b.y-a.y )*( c.x-a.x );
}

bool pan( int sx , int sy , int r , node a , node b ){
    if( cross( a , b , { sx , sy } ) < 0 ) return false;

    int a1=( b.y-a.y ) , b1=( a.x-b.x ) , c1=( b.x*a.y-a.x*b.y );
    int d=abss( a1*sx + b1*sy + c1 );
    d*=d;

    r*=r;
    r*=a1*a1+b1*b1;

    return d >= r;
}

void solve(){
    int n;
    cin>>n;

    int sx,sy,r;
    cin>>sx>>sy>>r;

    for( int i=1; i<=n; i++ ){
        cin>>A[ i ].x>>A[ i ].y;
    }

    //if( pan( sx , sy , r , A[ 1 ] , A[ 2 ] ) ) cout<<"gg"<<endl;

    int ans=0;
    int ne=1;
    int cnt=0;
    for( int i=1; i<=n; i++ ){
        if( ne==i ) ne=i+1;
        if( ne==n+1 ) ne=1;

        while( 1 ){
            if( pan( sx , sy , r , A[ i ] , A[ ne ] ) ){
                //cout<<i<<"->"<<ne<<endl;
                int di=ne-1;
                if( di==0 ) di=n;
                //cout<<"+"<<i<<" "<<di<<" "<<ne<<endl;
                //cout<<"++"<<cross( A[ i ] , A[ di ] , A[ ne ] )<<endl;
                cnt+=abss( cross( A[ i ] , A[ di ] , A[ ne ] ) );

                ne++;
                if( ne==n+1 ) ne=1;
            }
            else{
                ne--;
                if( ne==0 ) ne=n;
                break;
            }
        }

        //cout<<"结束"<<i<<" "<<cnt<<endl;

        ans=max( ans , cnt );

        int tt=i+1;
        if( tt>n ) tt=1;

        cnt-=abss( cross( A[ ne ] , A[ i ] , A[ tt ] ) );
        ne++; if( ne==n+1 ) ne=1;
    }

    cout<<ans<<endl;
}

signed main() {
    ios::sync_with_stdio( 0 );
    cin.tie( 0 ); cout.tie( 0 );

    int T=1;
    cin>>T;

    while( T-- ){
        solve();
    }

    return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 0ms
memory: 3588kb

input:

3
5
1 1 1
0 0
1 0
5 0
3 3
0 5
6
2 4 1
2 0
4 0
6 3
4 6
2 6
0 3
4
3 3 1
3 0
6 3
3 6
0 3

output:

5
24
0

result:

ok 3 number(s): "5 24 0"

Test #2:

score: -100
Wrong Answer
time: 0ms
memory: 3608kb

input:

1
6
0 0 499999993
197878055 -535013568
696616963 -535013568
696616963 40162440
696616963 499999993
-499999993 499999993
-499999993 -535013568

output:

9477925921974632250

result:

wrong output format Expected int64, but "9477925921974632250" found