/ SeriousOJ /

Record Detail

Runtime Error


  
# Status Time Cost Memory Cost
#1 Runtime Error 1ms 532.0 KiB
#2 Runtime Error 1ms 532.0 KiB

Code

#include <bits/stdc++.h>
using namespace std;
bool isitPrime(int n) // time complexity=O(sqrt(n))
{
    for (int i = 2; i * i <= n; i++)
    {
        if (n % i == 0)
            return false;
    }
    return true;
}
int main() // find smallest prime factor of a number
{
    int t;
    cin >> t;
    while (t--)
    {
        int x;
        cin >> x;
        vector<int> v(x + 1, 0);
        for (int i = 1; i <= x; i++)
        {
            cin >> v[i];
        }
        map<int, vector<int>> mp;
        for (int j = 1; j <= x; j++)
        {
            int n;
            n = j;
            int spf;
            if (isitPrime(n))
            {
                spf = n;
            }
            else
            {
                for (int i = 2; i * i <= n; i++)
                {
                    if (n % i == 0)
                    {
                        spf = i;
                        break;
                    }
                }
            }

            mp[spf].push_back(j);
        }
        vector<int> ans(x + 1, 0);
        for (auto it : mp)
        {
            vector<pair<int, int>> pr;
            for (auto val : it.second)
            {
                pr.push_back({v[val], val});
            }
            sort(pr.begin(), pr.end());
            int val = 1;
            for (int i = 0; i < pr.size(); i++)
            {
                ans[pr[i].second] = val++;
            }

            for (int i = 0; i < pr.size(); i++)
            {
                int cnt = 0;
                for (int j = i + 1; j < pr.size(); j++)
                {
                    if (ans[pr[i].second] > ans[j])
                    {
                        cnt++;
                    }
                }
                if (cnt != v[pr[i].second])
                {
                    cout << "NO" << endl;
                    return 0;
                }
            }
        }

        cout << "YES" << endl;
        for (int i = 1; i <= x; i++)
        {
            cout << ans[i] << " ";
        }
        cout << endl;
    }

    return 0;
}

Information

Submit By
Type
Submission
Problem
P1163 Roy and Array Construction
Contest
Brain Booster #8
Language
C++17 (G++ 13.2.0)
Submit At
2025-02-17 16:59:58
Judged At
2025-02-17 16:59:58
Judged By
Score
0
Total Time
1ms
Peak Memory
532.0 KiB