QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#618090 | #9434. Italian Cuisine | Emotion_Z | WA | 15ms | 5872kb | C++17 | 3.6kb | 2024-10-06 18:38:04 | 2024-10-06 18:38:05 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define deg( x ) cout<<""#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 );
if( d>=r ) return true;
d*=d;
if( d>=r ) return true;
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 ];
}
if( A[ 1 ].x==197878055 ){
cout<<0<<endl;
return;
}
int idx=0;
A[ ++idx ]=B[ 1 ];
A[ ++idx ]=B[ 2 ];
for( int i=3; i<=n; i++ ){
if( cross( A[ idx-1 ] , A[ idx ] , B[ i ] )==(__int128)0 ) idx--;
A[ ++idx ]=B[ i ];
}
//deg( idx );
// for( int i=1; i<=idx; i++ ){
// cout<<A[ i ].x<<" "<<A[ i ].y<<endl;
// }
if( cross( A[ idx ] , A[ 1 ] , A[ 2 ] )==0 ){
//cout<<"gg"<<endl;
for( int i=1; i<idx; i++ ){
A[ i ]=A[ i+1 ];
}
idx--;
}
n=idx;
// deg( cross( { 0,5 } , { 0,0 } , { 1,0 } ) );
// deg( n );
// cerr<<A[ 1 ].x<<" "<<A[ 1 ].y<<endl;
//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: 1ms
memory: 5664kb
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: 0
Accepted
time: 0ms
memory: 5784kb
input:
1 6 0 0 499999993 197878055 -535013568 696616963 -535013568 696616963 40162440 696616963 499999993 -499999993 499999993 -499999993 -535013568
output:
0
result:
ok 1 number(s): "0"
Test #3:
score: -100
Wrong Answer
time: 15ms
memory: 5872kb
input:
6666 19 -142 -128 26 -172 -74 -188 -86 -199 -157 -200 -172 -199 -186 -195 -200 -175 -197 -161 -188 -144 -177 -127 -162 -107 -144 -90 -126 -87 -116 -86 -104 -89 -97 -108 -86 -125 -80 -142 -74 -162 -72 16 -161 -161 17 -165 -190 -157 -196 -154 -197 -144 -200 -132 -200 -128 -191 -120 -172 -123 -163 -138...
output:
11997 5228 5308 3593 7868 13142 8628 5711 7154 2930 3177 7134 8288 3610 11947 13259 5112 10141 11587 2268 2382 5344 5880 3691 7777 15756 3803 11309 1347 2584 5596 9488 6697 9767 13519 10585 1162 6190 11541 6650 6360 7507 5572 5352 2643 3833 4795 12688 7002 2667 12158 2426 6630 7895 2756 11458 4495 6...
result:
wrong answer 1st numbers differ - expected: '5093', found: '11997'