QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#501290#5153. Delft DistancexixuCompile Error//C++204.5kb2024-08-02 16:25:592024-08-02 16:25:59

Judging History

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

  • [2024-08-02 16:25:59]
  • 评测
  • [2024-08-02 16:25:59]
  • 提交

answer

#pragma GCC optimize("Ofast")
#include<bits/stdc++.h>
using namespace std;
// #define int short

typedef long long ll;
typedef pair<int , int> PII;


const int M = 2e7 + 10 , inf = 0x3f3f3f3f , N = 1406;
const double PI = 3.1415926535;


typedef pair<short, short> PII;
typedef pair<double , pair<short , short>> PL;

short n , m;      // 点的数量
PII e[20000010];
int ne[20000010];
double w[20000010];
int idx;       // 邻接表存储所有边
int h[N][N];
double dist[N][N];
bool st[N][N];
// double dist[N];        // 存储所有点到1号点的距离
// bool st[N];     // 存储每个点的最短距离是否已确定

void add(PII a , PII b , double c)
{
    e[idx] = b;
    w[idx] = c;
    ne[idx] = h[a.first][a.second];
    h[a.first][a.second] = idx ++;
}

// 求1号点到n号点的最短距离,如果不存在,则返回-1
double dijkstra()
{
    // memset(dist, 0x3f, sizeof dist);
    for(int i = 1; i <= 2 * n + 2; i ++)
    {
        for(int j = 1; j <= 2 * m + 2; j ++)
        {
            dist[i][j] = inf;
        }
    }
    dist[1][1] = 0;

    priority_queue<PL, vector<PL>, greater<PL>> heap;
    heap.push({0, {1 , 1}});      // first存储距离,second存储节点编号

    while (heap.size())
    {
        auto t = heap.top();
        heap.pop();
        

        PII ver = t.second;
        double distance = t.first;

        if (st[ver.first][ver.second]) continue;
        st[ver.first][ver.second] = true;

        for (int i = h[ver.first][ver.second]; i != -1; i = ne[i])
        {
            PII j = e[i];
            if (dist[j.first][j.second] > distance + w[i])
            {
                dist[j.first][j.second] = distance + w[i];
                heap.push({dist[j.first][j.second], j});
            }
        }
    }

    return dist[2 * n + 1][2 * m + 1];
}





void solve()
{
    
    cin >> n >> m;

    for(int i = 0; i <= 2 * n + 2; i ++)
    {
        for(int j = 0; j <= 2 * m + 2; j ++)
        {
            h[i][j] = -1;
        }
    }

    for(int i = 1; i < 2 * n; i += 2)
    {
        for(int j = 1; j < 2 * m; j += 2)
        {
            // cout << i << ' ' << j << '\n';
            char c;
            cin >> c;
            if(c == 'X')
            {
                add({i , j} , {i , j + 2} , 10);
                add({i , j + 2} , {i , j} , 10);

                add({i , j} , {i + 2 , j} , 10);
                add({i + 2 , j} , {i , j} , 10);

                add({i , j + 2} , {i + 2 , j + 2} , 10);
                add({i + 2 , j + 2} , {i , j + 2} , 10);

                add({i + 2 , j} , {i + 2 , j + 2} , 10);
                add({i + 2 , j + 2} , {i + 2 , j} , 10);
            }
            else
            {
                add({i ,j} , {i + 1 , j} , 5);
                add({i + 1 , j} , {i , j} , 5);

                add({i + 1 , j} , {i + 2 , j} , 5);
                add({i + 2 , j} , {i + 1 , j} , 5);

                add({i + 2 , j} , {i + 2 , j + 1} , 5);
                add({i + 2 , j + 1} , {i + 2 , j} , 5);

                add({i + 2 , j + 1} , {i + 2 , j + 2} , 5);
                add({i + 2 , j + 2} , {i + 2 , j + 1} , 5);

                add({i + 2 , j + 2} , {i + 1 , j + 2} , 5);
                add({i + 1 , j + 2} , {i + 2 , j + 2} , 5);

                add({i + 1 , j + 2} ,{i , j + 2} , 5);
                add({i ,j + 2} , {i + 1 , j + 2} , 5);

                add({i , j + 2} , {i , j + 1} , 5);
                add({i , j + 1} , {i , j + 2} , 5);

                add({i , j + 1} , {i , j} , 5);
                add({i , j} , {i , j + 1} , 5);

                add({i + 1 , j} , {i , j + 1} , 5 * PI / 2);
                add({i , j + 1} , {i + 1 , j} , 5 * PI / 2);

                // cout << 5 * PI / 2 << '\n';
                add({i , j + 1} , {i + 1 , j + 2} , 5 * PI / 2);
                add({i + 1 , j + 2} , {i , j + 1} , 5 * PI / 2);

                add({i + 1 , j + 2} , {i + 2 , j + 1} , 5 * PI / 2);
                add({i + 2 , j + 1} , {i + 1 , j + 2} , 5 * PI / 2);

                add({i + 2 , j + 1} , {i + 1 , j} , 5 * PI / 2);
                add({i + 1 , j} , {i + 2 , j + 1} , 5 * PI / 2);
            }

        }
    }

    cout << fixed << setprecision(12) << dijkstra() << '\n';


}



signed main()
{
    cin.tie(0);cout.tie(0);
    ios::sync_with_stdio(false);

    int t = 1;
    // cin >> t;
    while(t --)
    {
        solve();
    }

    return 0;
}

Details

answer.code:14:28: error: conflicting declaration ‘typedef struct std::pair<short int, short int> PII’
   14 | typedef pair<short, short> PII;
      |                            ^~~
answer.code:7:25: note: previous declaration as ‘typedef struct std::pair<int, int> PII’
    7 | typedef pair<int , int> PII;
      |                         ^~~