QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#609452#9434. Italian CuisineexpectantCompile Error//C++142.6kb2024-10-04 13:04:242024-10-04 13:04:24

Judging History

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

  • [2024-10-04 13:04:24]
  • 评测
  • [2024-10-04 13:04:24]
  • 提交

answer

#include <bits/stdc++.h>
#define rep(i,j,k) for(int i=j;i<=(k);++i)
#define drp(i,j,k) for(int i=j;i>=(k);--i)
#define isdigit(ch) (ch>=48&&ch<=57)
#define mp std::make_pair
#define mod 1000000007
#define MAXN 1000005
typedef long long ll;
typedef long double ld;
typedef unsigned long long ull;
typedef std::pair<int,int> pii;
typedef std::pair<ll,ll> pll;
inline int read(){
	int x=0;
	bool sgn=true;
	char ch=getchar();
	while(!isdigit(ch)) sgn^=ch=='-',ch=getchar();
	while(isdigit(ch)) x=(x<<3)+(x<<1)+(ch^48),ch=getchar();
	return sgn?x:-x;
}
inline ll readll(){
	ll x=0;
	bool sgn=true;
	char ch=getchar();
	while(!isdigit(ch)) sgn^=ch=='-',ch=getchar();
	while(isdigit(ch)) x=(x<<3)+(x<<1)+(ch^48),ch=getchar();
	return sgn?x:-x;
}
template <typename tp> inline tp min(tp x,tp y){return x<y?x:y;}
template <typename tp> inline tp max(tp x,tp y){return x>y?x:y;}
template <typename tp> inline bool chkmin(tp &x,tp y){return x>y&&(x=y,true);}
template <typename tp> inline bool chkmax(tp &x,tp y){return x<y&&(x=y,true);}
int n;
ll r;
struct point{
    ll x,y;
    inline point operator + (const point &rhs)const{
        return (point){x+rhs.x,y+rhs.y};
    }
    inline point operator - (const point &rhs)const{
        return (point){x-rhs.x,y-rhs.y};
    }
    inline point operator * (ll val)const{
        return (point){x*val,y*val}; 
    }
}p,a[MAXN];
struct line{
    point st,ed;
    inline ll sqlen()const{
        return (st.x-ed.x)*(st.x-ed.x)+(st.y-ed.y)*(st.y-ed.y);
    }
};
inline ll dot(const point &lhs,const point &rhs){
    return lhs.x*rhs.x+lhs.y*rhs.y;
}
inline ll cross(const point &lhs,const point &rhs){
    return lhs.x*rhs.y-lhs.y*rhs.x;
}
// inline ld disline(const line &l,const point &cur){
//     return fabsl(cross(l.st-cur,l.ed-cur)/sqrtl(l.sqlen()));
// }
inline bool chk(const line &l){
    return (__int128)cross(l.st-p,l.ed-p)*cross(l.st-p,l.ed-p)>(__int128)r*r*l.sqlen();
}
inline ll solve(){
    int cur=0;
    ll ret=0,ans=0;
    rep(i,1,n){
        chkmax(cur,i+1);
        while(cur<i+n-1){
            if(cross(p-a[i],a[cur+1]-a[i])<=0) break;
            if(!chk(a[i],a[cur+1])) break;
            ret+=cross(a[cur+1]-a[i],a[cur]-a[i]);
            ++cur;
        }
        chkmax(ans,ret);
        ret-=cross(a[cur]-a[i+1],a[cur]-a[i]);
    }
    return ans;
}
int main(){
    drp(task,read(),1){
        n=read();
        p.x=read(),p.y=read(),r=read();
        rep(i,1,n) a[i].x=read(),a[i].y=read();
        std::reverse(a+1,a+n+1);
        rep(i,1,n) a[i+n]=a[i];
        printf("%lld\n",solve());
    }
}

Details

answer.code: In function ‘ll solve()’:
answer.code:72:24: error: invalid initialization of reference of type ‘const line&’ from expression of type ‘point’
   72 |             if(!chk(a[i],a[cur+1])) break;
      |                     ~~~^
answer.code:62:29: note: in passing argument 1 of ‘bool chk(const line&)’
   62 | inline bool chk(const line &l){
      |                 ~~~~~~~~~~~~^