QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#618579#7005. Rikka with ConsistencyhhdhhAC ✓879ms7596kbC++232.3kb2024-10-07 00:02:462024-10-07 00:02:47

Judging History

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

  • [2024-10-07 00:02:47]
  • 评测
  • 测评结果:AC
  • 用时:879ms
  • 内存:7596kb
  • [2024-10-07 00:02:46]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;

#define endl '\n'
#define rep(i, a, b) for(int i = (a); i <= (b); i++)
#define per(i, a, b) for(int i = (a); i >= (b); i--)
#define rept(i, a, ne) for(int i = (a); ~i ; i=ne[i])
#define debug(x) cout<<#x<<": "<<x<<endl
#define fi first
#define sec second
mt19937_64 rnd(chrono::steady_clock::now().time_since_epoch().count());
typedef long long LL;
typedef long double  LD;
typedef unsigned long long ULL;
typedef vector<int> VI;
typedef pair<int,int>PII;
const int N=50+10;
bool bo[N][N][N];
LD d[N][N][N];
int a[N];
LD pd[N][N];
LD eps=1e-10;
struct A
{
    int x,y,h;
    LD d;

    bool operator<(const A& a)const 
    {
        return d>a.d;
    }
};

void ud(priority_queue<A>&q,int x,int y,int h,LD di)
{
    if (d[x][y][h]>di)
    {
        d[x][y][h]=di;
        q.push({x,y,h,di});
    }
}
void slove()
{
    int n;
    cin>>n;

    rep(i,0,N-1)
    rep(j,0,N-1)
    rep(k,0,53)
    {
       bo[i][j][k]=0; 
       d[i][j][k]=1e18;
    }
    
    rep(i,0,n)
    cin>>a[i];
    a[n+1]=0;
    priority_queue<A> q;

    d[0][n][0] = 0;
    q.push({0,n,0,0});      

    while (q.size())
    {
        auto [x,y,h,di] = q.top();
        q.pop();
  
        if (bo[x][y][h]) continue;
        bo[x][y][h] = 1;
        //  cout<<x<<' '<<y<<' '<<h<<' '<<di<<endl;
        if(x>0&&a[x]==h)
        ud(q,x-1,y,h,(a[x-1]==a[x])+di);
        if(x<n&&a[x+1]==h)
        ud(q,x+1,y,h,(a[x]==a[x+1])+di);

        if(y>0&&a[y]==h)
        ud(q,x,y-1,h,(a[y-1]==a[y])+di);
        if(y<n&&a[y+1]==h)
        ud(q,x,y+1,h,(a[y]==a[y+1])+di);


        if(h<max(a[x],a[x+1])&&h<max(a[y],a[y+1]))
        {
            LD nd=pd[a[x]][a[x+1]]+pd[a[y]][a[y+1]];
            ud(q,x,y,h+1,nd+di);
        }  
        if(h>min(a[x],a[x+1])&&h>min(a[y],a[y+1]))
        {
            LD nd=pd[a[x]][a[x+1]]+pd[a[y]][a[y+1]];
            ud(q,x,y,h-1,nd+di);
        }  
    }
    cout<<d[n][0][0]<<endl;
}

int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
	cout << fixed << setprecision(10);
    int t=1;
	cin>>t;
    rep(i,0,50)
    rep(j,0,50)
    if(i!=j)
    pd[i][j]=sqrtl((i-j)*(i-j)+1)/fabsl(i-j);
    
    while(t--)
    {
        slove();
    }


    return 0;
}
//#pragma GCC optimize(2)

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

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 2ms
memory: 7572kb

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: 316ms
memory: 7588kb

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: 566ms
memory: 7496kb

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: 879ms
memory: 7596kb

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