Submission #733932

#TimeUsernameProblemLanguageResultExecution timeMemory
733932vjudge1Cryptography (NOI20_crypto)C++17
26 / 100
1085 ms24268 KiB
#include <bits/stdc++.h>
using namespace std;
#define ll long long 
const ll d = 1e9 + 7;
map <ll,ll> mp;
ll ft(ll a, ll b) {
    ll ans = 1;
    for(ll i = a; i <= b; i++) {
        ans *= i;
        ans %= d;
    }
    return ans;
}
int main() {
    ll n;
    cin >> n;
    vector <ll> v(n), v1;
    for(ll i = 0; i < n; i++) {
        cin >> v[i];
        mp[v[i]]++;
    }
    v1 = v;
    ll ans = 1;
    sort(v1.begin(), v1.end());
    if(v == v1) {
        cout << 1;
        return 0;
    }
    reverse(v1.begin(), v1.end());
    if(v1 == v) {
        cout << n;
        return 0;
    }
    else reverse(v1.begin(), v1.end());
    for(ll i = 0; i < v.size(); i++) {
        for(ll j = 0; j < v1.size(); j++) {
            if(v[i] == v1[j]) {
                n--;
                if(mp[v[i]] != 1) {
                    ll laa = (ft(2, n) / ft(2, mp[v[i]]));
                    if(laa != 1) ans += laa;
                    mp[v[i]]--;
                    ans %= d;
                    auto it = v1.begin() + j;
                    auto it1 = v.begin() + i;
                    v1.erase(it);
                    v.erase(it1);
                    i--;
                    j--;
                    break;
                }
                ans += ft(2, n) * j;
                ans %= d;
                auto it = v1.begin() + j;
                auto it1 = v.begin() + i;
                v1.erase(it);
                v.erase(it1);
                i--;
                j--;
                break;
            }
        }
    }
    cout << ans;
}

Compilation message (stderr)

Crypto.cpp: In function 'int main()':
Crypto.cpp:35:21: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   35 |     for(ll i = 0; i < v.size(); i++) {
      |                   ~~^~~~~~~~~~
Crypto.cpp:36:25: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   36 |         for(ll j = 0; j < v1.size(); j++) {
      |                       ~~^~~~~~~~~~~
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...