PCK2020もうひとつの本選に参加して、11完76点でもうひとつの本選内1位でした。PCKは同校制限を撤廃しろ
本選3位相当です。(2位が86点、3位が変わらず75点)
相方の記事はこれ
thistleprogram.hatenablog.com
戦略&タイムライン
とりあえずThistleに前の方見てもらう。その間にぼくが4番以降の傾向を一通り確かめる。
この時点で機械的にThistleに7番と8番を振り、自分は6番と10番の幾何+9番のad-hocを回収することにする。
Thistleが8番を通してくれた後はグラフとデの11,12,(13)のうち好きなのを持って行ってもらった。そうしたらなんか12を通してきて、その後で11も通してくれたので大感謝 13はちょっと考えてすぐに捨てたらしい
結局割り振りは以下のようになった。
Rho: 4,5,6,10,(9)
Thistle: 1,2,3,7,8,11,12
0:02:50 問題1 AC
0:05:33 問題2 AC
0:12:09 問題4 AC
0:13:49 問題3 AC
0:16:41 問題5 AC
0:52:41 問題7 AC
1:26:15 問題6 AC [ペナ1]
1:31:28 問題8 AC [ペナ1]
1:59:15 問題10 AC ←???????
2:50:40 問題12 AC [ペナ4]
3:40:46 問題11 AC [ペナ2]
やったこと
10番で区分求積を投げたら通りました (あの!?)
TL見た感じ誤差がキツイようでしたが私は 分割したので特に苦しみませんでした
#include<bits/stdc++.h>
using namespace std;
#define rep(i,n) for(int i=0;i<n;i++)
typedef long long ll;
#define double long double
double x[3],y[3];
const double h=0.000025;
double andlen2(double p1,double q1,double p2,double q2){
double res=min(q1,q2)-max(p1,p2);
return max((double)0,res);
}
double andlen3(double p1,double q1,double p2,double q2,double p3,double q3){
double res=min({q1,q2,q3})-max({p1,p2,p3});
return max((double)0,res);
}
int main(){
double r;cin>>r;
rep(i,3)cin>>x[i]>>y[i];
double ymin=min({y[0],y[1],y[2]})-r;
double ymax=max({y[0],y[1],y[2]})+r;
double ans=0;
for(double Y=ymin;Y<=ymax;Y+=h){
double p[3],q[3];
q[0]=sqrt(max(r*r-(y[0]-Y)*(y[0]-Y),(double)0));
p[0]=-q[0];
p[0]+=x[0];q[0]+=x[0];
q[1]=sqrt(max(r*r-(y[1]-Y)*(y[1]-Y),(double)0));
p[1]=-q[1];
p[1]+=x[1];q[1]+=x[1];
q[2]=sqrt(max(r*r-(y[2]-Y)*(y[2]-Y),(double)0));
p[2]=-q[2];
p[2]+=x[2];q[2]+=x[2];
double d=q[0]+q[1]+q[2]-p[0]-p[1]-p[2]-andlen2(p[0],q[0],p[1],q[1])-andlen2(p[1],q[1],p[2],q[2])-andlen2(p[2],q[2],p[0],q[0])+andlen3(p[0],q[0],p[1],q[1],p[2],q[2]);
ans+=h*d;
}
printf("%.11Lf\n",ans);
}
10通した後はずっと9でくすぶってました 辺を貼るという発想が無かった...
感想
ありがとうThistle
もうひとつ優勝したんだしなんか商品くれ~
PCKは同校制限を撤廃しろ