QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#658541 | #7015. Rikka with Illuminations | Mu_Silk | WA | 18ms | 3532kb | C++20 | 2.3kb | 2024-10-19 17:00:44 | 2024-10-19 17:00:45 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
struct vec{
ll x,y;
vec operator-(vec a){
return {x-a.x,y-a.y};
}
ll dist2(){
return x*x+y*y;
}
};
ll cross(vec a,vec b){
return a.x*b.y-a.y*b.x;
}
int add(int a,int b,int p){
int t=a+b;
return t>=p?t-p:t;
}
int sub(int a,int b,int p){
int t=a-b;
return t<0?t+p:t;
}
const int N=1010;
vec a[N],b[N];
int nxta[N],use[N];
void solve(){
int n,m;cin>>n>>m;
auto pre=[&](int x){
return x==0?n-1:x-1;
};
auto nxt=[&](int x){
return x==n-1?0:x+1;
};
for(int i=0;i<n;i++){
cin>>a[i].x>>a[i].y;
nxta[i]=use[i]=0;
}
for(int i=0;i<m;i++){
cin>>b[i].x>>b[i].y;
int minp=0;
for(int j=0;j<n;j++){
if((b[i]-a[j]).dist2()<(b[i]-a[minp]).dist2())minp=i;
}
int l=minp,r=minp;
while(cross(a[pre(l)]-b[i],a[l]-b[i])<0)l=pre(l);
while(cross(a[nxt(r)]-b[i],a[r]-b[i])>0)r=nxt(r);
if(sub(r,l,n)>nxta[l]){
nxta[l]=sub(r,l,n);
use[l]=i;
}
}
const int inf=1e9;
int ansv=inf,ansp=-1;
for(int i=0;i<n;i++){
int ans=0;
int l=0,r=0;
while(1){
ans++;
int p=0;
for(int j=l;j<=r;j++){
int d=nxta[add(j,i,n)];
if(j+d>p)p=j+d;
}
if(p>=n)break;
if(p<r+1){
ans=inf;
break;
}
l=r+1,r=p;
}
if(ansv>ans){
ansv=ans;
ansp=i;
}
}
if(ansv==inf){
cout<<"-1\n";
return;
}
cout<<ansv<<"\n";
vector<int> vv;
int l=0,r=0;
while(1){
int p=0;
int usep=0;
for(int j=l;j<=r;j++){
int d=nxta[add(j,ansp,n)];
if(j+d>p){
p=j+d;
usep=use[add(j,ansp,n)];
}
}
vv.push_back(usep);
if(p>=n)break;
l=r+1,r=p;
}
for(int i=0;i<ansv;i++){
cout<<vv[i]+1<<" \n"[i==ansv-1];
}
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
int n=1;
cin>>n;
while(n--)solve();
return 0;
}
详细
Test #1:
score: 100
Accepted
time: 0ms
memory: 3524kb
input:
1 3 3 0 0 1 0 0 1 -1 -1 3 -1 -1 3
output:
2 2 1
result:
ok 1 cases.
Test #2:
score: -100
Wrong Answer
time: 18ms
memory: 3532kb
input:
100 13 17 -976 -766 -628 -956 462 -987 967 -997 981 -123 919 115 847 336 692 789 350 908 -558 996 -843 944 -944 400 -974 -476 -41876798 919231678 -375313647 26070145 -288061228 527643156 -93144407 730297 93699145 -260606010 -393321698 -339399089 644245933 784344503 -731740672 525632046 -32141854 114...
output:
2 5 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 5 11 22 38 46 49 -1 -1 -1 -1 -1 -1 4 38 40 81 87 -1 -1 5 10 44 61 79 91 -1 -1 4 9 58 92 36 4 16 57 125 7 -1 5 66 91 93 110 162 4 8 101 147 9 -1 -1 6 50 99 98 122 189 197 -1 -1 -1 -1 -1 -1 -1 -1 -1 4 85 133 176 260 4 62 154 23...
result:
wrong answer In case 6, there is solution but output no.