Submission #291026

#TimeUsernameProblemLanguageResultExecution timeMemory
291026crossing0verW (RMI18_w)C++17
20 / 100
1094 ms9080 KiB
#include<bits/stdc++.h> #define ll long long #define pb push_back #define pii pair<int,int> #define vi vector<int> #define fi first #define se second #define all(x) (x).begin(),(x).end() using namespace std; const int mod = 1e9+7; int cnt[1000005],arr[300005],n; int POW[5][300005]; void solve() { for (int i = 2; i <= 4; i++) { POW[i][0] = 1; for (int j = 1; j < 300005; j++) POW[i][j] = (ll)POW[i][j-1]*i%mod; } ll ans = 0; for (int a = 2; a < n; a++) for (int mx = a+1; mx <= n; mx++) { ll z = (ll)(POW[2][a-2] - 1)*POW[4][mx-a-1]%mod; z = z*POW[2][n-mx]%mod; z -= (ll)POW[2][a-2]*POW[3][mx-a-1]%mod; z = (z%mod + mod)%mod; ans += z; // ans %= mod; } for (int a = 2; a < n; a++) { for (int mx = a+1; mx < n; mx++) { ans += (ll)POW[4][mx-a-1]*POW[2][n-mx]%mod; ans -= POW[3][mx-a-1]*2LL%mod; } int mx = n; ans += (ll)POW[4][mx - a - 1]*POW[2][n-mx]%mod; ans -= POW[3][mx-a-1]*2LL%mod; ans += POW[2][mx-a-1]; } ans = (ans%mod + mod)%mod; cout << ans; exit(0); } main() { ios::sync_with_stdio(0); cin.tie(0); cin >> n; for (int i = 0; i< n; i++) { cin >> arr[i]; cnt[arr[i]]++; } sort(arr,arr+n); reverse(arr,arr+n); if (arr[n-1] == arr[0]) { cout << 0; return 0; } int diff= 1; for (int i = 1; i <= 1000000; i++) { if (cnt[i] > 1) diff= 0; } if (diff) solve(); for (int i = 1; i <= n; i++) { if (arr[i] != arr[i-1]) { ll left = i; ll right = n - left; if (left < 3 || right < 2) { cout << 0; return 0; } ll ans = 0; for (int i = 1; i <= left - 2; i++) ans += (left - i - 1); ans *= right - 1; cout << ans%(1000000007); return 0; } } int a[2] = {}; int c= 0; ll ans = 1; for (int i = 1; i <= 1000000; i++) { if (cnt[i]) { c++; ans*=(cnt[i] - 1); } } cout << ans*(c/2); }

Compilation message (stderr)

w.cpp:46:6: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
   46 | main() {
      |      ^
w.cpp: In function 'int main()':
w.cpp:85:6: warning: unused variable 'a' [-Wunused-variable]
   85 |  int a[2] = {};
      |      ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...