QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#637586#7005. Rikka with ConsistencytarjenAC ✓1840ms145004kbC++202.0kb2024-10-13 13:26:272024-10-13 13:26:29

Judging History

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

  • [2024-10-13 13:26:29]
  • 评测
  • 测评结果:AC
  • 用时:1840ms
  • 内存:145004kb
  • [2024-10-13 13:26:27]
  • 提交

answer

#include <bits/stdc++.h>
using namespace std;
typedef long double lf;
lf read(){
    int x;cin>>x;return (lf)x;
}
const lf inf =1e9;
lf dis[3000][3000];
struct point {
    lf x,y;
};
int equal(lf x,lf y){
    return fabs(x-y)<=1e-9;
}
lf dist(point a,point b){
    return sqrtl((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
}
struct kkk{
    int x,y;
    lf len;
    bool operator<(kkk k1)const{
        return len>k1.len;
    }
};
lf solve()
{
    int n;cin>>n;
    vector<int> a(n+1);
    for(int i=0;i<=n;i++)cin>>a[i];
    vector<point>p;
    for(int i=0;i<n;i++){
        p.push_back(point{(lf)i,(lf)a[i]});
        if(a[i]<a[i+1]){
            for(int j=a[i]+1;j<a[i+1];j++){
                p.push_back(point{(lf)i+(lf)(j-a[i])/((lf)(a[i+1]-a[i])),(lf)j});
            }
        }
        if(a[i]>a[i+1]){
            for(int j=a[i]-1;j>a[i+1];j--){
                p.push_back(point{(lf)i+(lf)(a[i]-j)/((lf)(a[i]-a[i+1])),(lf)j});
            }
        }
    }
    p.push_back(point{(lf)n,(lf)a[n]});
    vector<pair<int,int>> vis;
    priority_queue<kkk,vector<kkk>> qu;
    qu.push(kkk{0,(int)p.size()-1,0.});
    while(!qu.empty()){
        kkk k1=qu.top();qu.pop();
        if(dis[k1.x][k1.y]!=inf)continue;
        vis.emplace_back(k1.x,k1.y);
        dis[k1.x][k1.y]=k1.len;
        for(int i=-1;i<=1;i++){
            for(int j=-1;j<=1;j++)if((!(i==0&&j==0))&&(i+k1.x>=0&&i+k1.x<p.size()&&j+k1.y>=0&&j+k1.y<p.size())){
                if(equal(p[i+k1.x].y,p[j+k1.y].y)){
                    qu.push(kkk{i+k1.x,j+k1.y,k1.len+dist(p[k1.x],p[i+k1.x])+dist(p[k1.y],p[k1.y+j])});
                }
            }
        }
    }
    lf ans=dis[p.size()-1][0];
    for(auto [x,y]:vis)dis[x][y]=inf;
    return ans;
}
int main()
{
    for(int i=0;i<3000;i++){
        for(int j=0;j<3000;j++)dis[i][j]=inf;
    }
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout<<fixed<<setprecision(10);
    int T;cin>>T;while(T--)cout<<solve()<<"\n";
    return 0;
}

这程序好像有点Bug,我给组数据试试?

詳細信息

Test #1:

score: 100
Accepted
time: 25ms
memory: 144460kb

input:

2
4
0 1 1 2 0
4
0 2 1 3 0

output:

12.1289902045
22.3136245686

result:

ok 2 cases

Test #2:

score: 0
Accepted
time: 240ms
memory: 144884kb

input:

500
34
0 12 2 25 18 11 17 7 24 20 19 18 34 26 14 15 11 16 3 19 6 21 34 33 12 6 29 10 27 22 5 7 7 25 0
40
0 18 15 11 15 10 9 26 34 13 35 12 27 36 33 3 7 28 6 24 12 30 38 39 14 14 12 13 24 35 28 35 11 22 19 39 8 6 18 3 0
43
0 25 1 23 21 5 16 36 22 3 31 34 9 3 41 17 11 39 22 0 16 39 15 10 8 33 24 21 20...

output:

1906.0227443439
1873.2359020590
2645.0638835510
541.3343735756
1235.7890705751
1951.6734665821
1213.9245379866
2017.5869647005
312.7644098498
3422.7892270310
138.6143738401
2149.9886075935
1046.3983990275
47.2354965428
2511.3020333589
60.5339378890
87.7918204661
2535.3037067975
13.6251184001
1041.33...

result:

ok 500 cases

Test #3:

score: 0
Accepted
time: 762ms
memory: 144952kb

input:

500
43
0 6 6 1 1 1 6 1 1 5 1 5 6 5 6 1 5 5 6 6 5 5 6 1 5 6 1 6 5 5 5 6 6 6 1 1 6 6 5 1 5 6 1 0
50
0 18 39 18 28 18 18 18 28 47 28 28 48 8 8 39 48 8 39 19 47 19 19 18 48 20 28 28 18 20 20 39 48 8 8 39 48 20 20 20 8 8 18 19 8 8 8 18 8 48 0
43
0 25 29 25 44 32 32 50 50 32 29 44 25 25 25 25 32 44 29 24 ...

output:

252.2065976424
2006.4352817213
1567.0389256057
247.4145601157
2355.1321913974
2039.2389722058
585.4789742390
1706.2900658340
2455.7783261244
1429.6683040297
386.2247435139
2328.3531873156
231.7998168538
1613.9361966964
1209.0836904200
933.4911595684
1443.0473731123
2567.8362512484
1821.0363941722
27...

result:

ok 500 cases

Test #4:

score: 0
Accepted
time: 1840ms
memory: 145004kb

input:

500
42
0 27 22 28 20 31 17 33 14 34 13 35 11 42 8 44 4 49 2 50 1 23 3 47 5 46 7 43 9 41 10 38 12 36 16 32 18 30 19 29 23 23 0
44
0 23 23 27 20 32 18 36 15 38 11 44 8 45 6 47 4 48 3 23 1 50 5 46 7 43 9 42 12 41 13 40 14 37 16 35 17 33 19 31 21 29 22 28 0
48
0 48 3 46 5 44 7 41 9 39 11 37 13 35 15 32 ...

output:

19134.1832142736
24340.1014771662
4598.0135761172
35163.5943454428
19719.4946797070
24330.9798185242
17290.0968115848
31672.4505810901
30612.7890458521
21650.2868919396
26014.0448811735
10391.5615138845
25028.3336779208
36818.6491796774
29255.2609754685
24770.6063188676
17962.4126290372
21344.119291...

result:

ok 500 cases