QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#618001 | #9434. Italian Cuisine | Emotion_Z | WA | 1ms | 5828kb | C++20 | 3.1kb | 2024-10-06 18:02:48 | 2024-10-06 18:02:49 |
Judging History
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;
int abss( __int128 x ){
if( x<=0 ) x=-x;
return x;
}
istream &operator>>( istream &in , __int128 &n ){
string s; in>>s;
n=0;
int f=1;
int st=0;
if( s[ 0 ]=='-' ) f=-1 , st=1;
for( int i=st; i<s.size(); i++ ) n=n*10+s[ i ]-'0';
n*=f;
return in;
}
ostream &operator<<( ostream &out , __int128 n ){
if( n==0 ){
out<<0;
return out;
}
string s;
bool ok=false;
if( n<0 ) ok=true , n=-n;
while( n ){
s+='0'+n%10;
n/=10;
}
if( ok ) s+='-';
reverse( s.begin( ) , s.end( ) );
out<<s;
return out;
}
struct node{
int x , y;
};
node A[ N ];
node B[ N ];
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 g=__gcd( a1 , __gcd( b1 , c1 ) );
a1/=g , b1/=g , c1/=g;
int d=abss( a1*sx + b1*sy + c1 );
d*=d;
int di=( a1*a1+b1*b1 );
g=__gcd( di , d );
d/=g , di/=g;
r*=r;
r*=di;
if( d>=r ) return true;
return false;
}
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;
B[ i ]=A[ i ];
}
int idx=0;
A[ ++idx ]=B[ 1 ];
A[ ++idx ]=B[ 2 ];
for( int i=3; i<=n; i++ ){
if( cross( A[ idx ] , A[ idx-1 ] , B[ i ] )==0 ) idx--;
A[ ++idx ]=B[ i ];
}
if( cross( A[ 1 ] , A[ 2 ] , A[ idx ] )==0 ){
for( int i=1; i<idx; i++ ){
A[ i ]=A[ i+1 ];
}
idx--;
}
n=idx;
//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: 0
Wrong Answer
time: 1ms
memory: 5828kb
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:
0 24 0
result:
wrong answer 1st numbers differ - expected: '5', found: '0'