| # | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
|---|---|---|---|---|---|---|---|
| 880130 | Youssif_Elkadi | Ekoeko (COCI21_ekoeko) | C++17 | 6 ms | 1888 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
using namespace std;
const long long N = 2e5 + 5, mod = 1e9 + 7, inf = 1e9 + 5;
int tree[N];
long long nr;
void update(int idx, int val)
{
while (idx <= nr)
{
tree[idx] += val;
idx += idx & -idx;
}
return;
}
int query(int idx)
{
int ret = 0;
while (idx)
{
ret += tree[idx];
idx -= idx & -idx;
}
return ret;
}
bool sub1(string x)
{
char hi1 = x[0], hi2 = x[x.size() - 1];
for (int i = 0; i < x.size() / 2; i++)
if (hi1 != x[i])
return 0;
for (int i = x.size() / 2; i < x.size(); i++)
if (hi2 != x[i])
return 0;
else
return 1;
}
int main()
{
ios_base::sync_with_stdio(0), cin.tie(NULL), cout.tie(NULL);
// freopen("input.txt", "r", stdin);
// freopen("output.txt", "w", stdout);
long long n;
cin >> n;
string x;
cin >> x;
if (sub1(x))
{
return cout << (n / 2) * (n / 2) << "\n", 0;
}
long long ans = 0;
string tmp1, tmp2, tmp3, tmp4;
int vis[26] = {};
for (int i = 0; i < n; i++)
{
vis[x[i] - 'a']++;
if (vis[x[i] - 'a'] == 2)
tmp2.push_back(x[i]);
else
tmp1.push_back(x[i]);
}
int p = n;
for (int i = n - 1; i >= 0; i--)
{
vis[x[i] - 'a']--;
if (vis[x[i] - 'a'])
ans += p - i - 1, p--;
}
for (int i = n * 2 - 1; i >= n; i--)
{
vis[x[i] - 'a']++;
if (vis[x[i] - 'a'] == 2)
tmp4.push_back(x[i]);
else
tmp3.push_back(x[i]);
}
reverse(tmp4.begin(), tmp4.end());
reverse(tmp3.begin(), tmp3.end());
p = n;
for (int i = n; i < 2 * n; i++)
{
vis[x[i] - 'a']--;
if (vis[x[i] - 'a'])
ans += i - p, p++;
}
string a, b;
a = tmp1 + tmp4, b = tmp2 + tmp3;
nr = a.size();
ans += 1LL * tmp4.size() * tmp2.size();
vector<queue<int>> ind(26);
for (int i = 0; i < b.size(); i++)
ind[b[i] - 'a'].push(i);
for (int i = 0; i < a.size(); i++)
{
ans += ind[a[i] - 'a'].front() - query(ind[a[i] - 'a'].front() + 1);
update(ind[a[i] - 'a'].front() + 1, 1);
ind[a[i] - 'a'].pop();
}
cout << ans << "\n";
}
/*
4
*/컴파일 시 표준 에러 (stderr) 메시지
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
