Submission #418376

#TimeUsernameProblemLanguageResultExecution timeMemory
418376ACmachineAmusement Park (CEOI19_amusementpark)C++17
42 / 100
3043 ms162208 KiB
#include <bits/stdc++.h>
using namespace std;
#define FOR(i, j, k, l) for(int i = (j); i < (k); i += (l))
#define FORD(i, j, k, l) for(int i = (j); i >= (k); i -= (l))
#define REP(i, n) FOR(i, 0, n, 1)
#define REPD(i, n) FORD(i, n, 0, 1)
#define pb push_back
typedef long long ll;
const int INF = (int)1e9;
const ll INFF = (ll)1e18;
const ll mod = 998244353;
mt19937_64 rng(time(NULL));
int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    int n, m;
    cin >> n >> m;
    vector<array<int, 2>> edges;
    vector<ll> random(m, 0);
    REP(i, m){
        int u, v;
        cin >> u >> v;
        u--; v--;
        edges.pb({u, v});
        random[i] = rng();
    }
    unordered_set<ll> uset;
    vector<int> order(n);
    iota(order.begin(), order.end(), 0);
    vector<int> pos(n, 0);
    ll ans = 0;
    do{
        REP(i, n){
            pos[order[i]] = i;
        }
        ll hsh = 0; int cost = 0;
        REP(i, edges.size()){
            auto e = edges[i];
            if(pos[e[0]] > pos[e[1]]){
                hsh += random[i];
                cost++;
            }
        }
        if(uset.find(hsh) != uset.end())
            continue;
        uset.insert(hsh);
        ans += cost;
        if(ans >= mod)
            ans -= mod;
    }while(next_permutation(order.begin(), order.end()));
    cout << ans << "\n";
    return 0;
}

Compilation message (stderr)

amusementpark.cpp: In function 'int main()':
amusementpark.cpp:3:44: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::array<int, 2> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
    3 | #define FOR(i, j, k, l) for(int i = (j); i < (k); i += (l))
      |                                            ^
amusementpark.cpp:5:19: note: in expansion of macro 'FOR'
    5 | #define REP(i, n) FOR(i, 0, n, 1)
      |                   ^~~
amusementpark.cpp:37:9: note: in expansion of macro 'REP'
   37 |         REP(i, edges.size()){
      |         ^~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...