Submission #70852314
Source Code Expand
#include <bits/stdc++.h>
using namespace std;
constexpr long long mod = 1e9 + 7;
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n, m;
cin >> n >> m;
vector<pair<int, int>> in1, in2;
for(int i = 0; i < m; i++){
int a, b;
cin >> a >> b;
a--;
b--;
if(a < b){
in1.emplace_back(a, b - 1);
}
else{
in2.emplace_back(b, a - 1);
}
}
auto sub = [&](vector<pair<int, int>> &in){
multiset<int> st;
st.insert(-1);
int sz = in.size();
vector<int> res(n - 1);
vector<vector<int>> add(n - 1), era(n - 1);
for(auto [l, r]: in){
add[l].emplace_back(l);
era[r].emplace_back(l);
}
for(int i = 0; i < n - 1; i++){
for(int ad: add[i]){
st.insert(ad);
}
auto itr = st.end();
res[i] = *(--itr);
for(int er: era[i]){
st.erase(st.find(er));
}
}
return res;
};
vector<int> mxl1 = sub(in1), mxl2 = sub(in2);
vector<vector<long long>> dp(26, vector<long long>(n, 0));
vector<vector<long long>> dpsum(26, vector<long long>(n + 1, 0));
for(int i = 0; i < 26; i++){
dp[i][0] = 1;
dpsum[i][1] = 1;
}
for(int i = 0; i < n - 1; i++){
int left;
long long s;
// < にしたい
left = mxl1[i] + 1;
s = 0;
for(int j = 0; j < 26; j++){
dp[j][i + 1] += s;
s += dpsum[j][i + 1] - dpsum[j][left];
s %= mod;
}
// > にしたい
left = mxl2[i] + 1;
s = 0;
for(int j = 25; j >= 0; j--){
dp[j][i + 1] += s;
s += dpsum[j][i + 1] - dpsum[j][left];
s %= mod;
}
for(int j = 0; j < 26; j++){
dpsum[j][i + 2] = dpsum[j][i + 1] + dp[j][i + 1];
dpsum[j][i + 2] %= mod;
}
}
long long ans = 0;
for(int i = 0; i < 26; i++){
for(int j = 0; j < n; j++){
ans += dp[i][j];
ans %= mod;
}
}
if(ans < 0) ans += mod;
cout << ans << endl;
}
/*
dif[0], dif[1], ..., dif[n - 2] を決める
dif[i] \in {>, =, <} : それぞれ s[i], s[i + 1] の関係
*/
/*
dp[最後の = 以外が > か < か][その場所][今の文字] とする dp をしたい
in1 の区間 [l, r] について
dif[l, r] について < は > より後に出てくる
in2 の区間 [l, r] について
dif[l, r] について > は < より後に出てくる
dif[p] = < としたい
in1 かつ l <= p <= r なる [l, r] について l の max を取る
[その場所] が l 未満 -> 遷移ダメ
それ以外 ok
l <= p' < p で dif[p'] = > : 当然 ok
dif[p'] = < : p' に < を置いてるので ok
dif[p] = > としたい
in2 かつ l <= p <= r なる [l, r] について l の max を取る
[その場所] が l 未満 -> 遷移ダメ
それ以外 ok
l <= p' < p で dif[p'] = > : p' に > を置いてるので ok
dif[p'] = < : 当然 ok
結局 dp[最後に = でなかった場所][今の文字] として良さそう
各 p について in1 かつ l <= p <= r なる [l, r] について l の max を取りたい
multiset でできそう
*/
Submission Info
| Submission Time | |
|---|---|
| Task | C - スペルミス (Misspelling) |
| User | Mitsubachi |
| Language | C++ 20 (gcc 12.2) |
| Score | 100 |
| Code Size | 3483 Byte |
| Status | AC |
| Exec Time | 699 ms |
| Memory | 238924 KiB |
Compile Error
Main.cpp: In lambda function:
Main.cpp:29:13: warning: unused variable ‘sz’ [-Wunused-variable]
29 | int sz = in.size();
| ^~
Judge Result
| Set Name | Subtask 1 | Subtask 2 | Subtask 3 | Subtask 4 | Subtask 5 | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Score / Max Score | 8 / 8 | 20 / 20 | 29 / 29 | 32 / 32 | 11 / 11 | ||||||||||
| Status |
|
|
|
|
|
| Set Name | Test Cases |
|---|---|
| Subtask 1 | 01-01.txt, 01-02.txt, 01-03.txt, 01-04.txt, 01-05.txt, 01-06.txt, 01-07.txt, 01-08.txt, sample-01.txt, sample-02.txt, sample-03.txt, sample-04.txt, sample-05.txt, 03-08.txt |
| Subtask 2 | 01-01.txt, 01-02.txt, 01-03.txt, 01-04.txt, 01-05.txt, 01-06.txt, 01-07.txt, 01-08.txt, 02-01.txt, 02-02.txt, 02-03.txt, 02-04.txt, 02-05.txt, 02-06.txt, 02-07.txt, 02-08.txt, 02-09.txt, 02-10.txt, sample-01.txt, sample-02.txt, sample-03.txt, sample-04.txt, sample-05.txt, 03-07.txt, 03-08.txt |
| Subtask 3 | 03-01.txt, 03-02.txt, 03-03.txt, 03-04.txt, 03-05.txt, 03-06.txt, 03-07.txt, 03-08.txt, 03-09.txt, sample-01.txt, sample-04.txt, sample-05.txt, 01-07.txt |
| Subtask 4 | 01-01.txt, 01-02.txt, 01-03.txt, 01-04.txt, 01-05.txt, 01-06.txt, 01-07.txt, 01-08.txt, 02-01.txt, 02-02.txt, 02-03.txt, 02-04.txt, 02-05.txt, 02-06.txt, 02-07.txt, 02-08.txt, 02-09.txt, 02-10.txt, 04-01.txt, 04-02.txt, 04-03.txt, 04-04.txt, 04-05.txt, 04-06.txt, 04-07.txt, 04-08.txt, 04-09.txt, 04-10.txt, 04-11.txt, 04-12.txt, 04-13.txt, sample-01.txt, sample-02.txt, sample-03.txt, sample-04.txt, sample-05.txt, 03-06.txt, 03-07.txt, 03-08.txt |
| Subtask 5 | 01-01.txt, 01-02.txt, 01-03.txt, 01-04.txt, 01-05.txt, 01-06.txt, 01-07.txt, 01-08.txt, 02-01.txt, 02-02.txt, 02-03.txt, 02-04.txt, 02-05.txt, 02-06.txt, 02-07.txt, 02-08.txt, 02-09.txt, 02-10.txt, 03-01.txt, 03-02.txt, 03-03.txt, 03-04.txt, 03-05.txt, 03-06.txt, 03-07.txt, 03-08.txt, 03-09.txt, 04-01.txt, 04-02.txt, 04-03.txt, 04-04.txt, 04-05.txt, 04-06.txt, 04-07.txt, 04-08.txt, 04-09.txt, 04-10.txt, 04-11.txt, 04-12.txt, 04-13.txt, 05-01.txt, 05-02.txt, 05-03.txt, 05-04.txt, 05-05.txt, 05-06.txt, 05-07.txt, 05-08.txt, 05-09.txt, 05-10.txt, 05-11.txt, 05-12.txt, sample-01.txt, sample-02.txt, sample-03.txt, sample-04.txt, sample-05.txt |
| Case Name | Status | Exec Time | Memory |
|---|---|---|---|
| 01-01.txt | AC | 1 ms | 3636 KiB |
| 01-02.txt | AC | 1 ms | 3436 KiB |
| 01-03.txt | AC | 1 ms | 3404 KiB |
| 01-04.txt | AC | 1 ms | 3504 KiB |
| 01-05.txt | AC | 1 ms | 3512 KiB |
| 01-06.txt | AC | 1 ms | 3412 KiB |
| 01-07.txt | AC | 1 ms | 3428 KiB |
| 01-08.txt | AC | 1 ms | 3364 KiB |
| 02-01.txt | AC | 1 ms | 3592 KiB |
| 02-02.txt | AC | 1 ms | 3600 KiB |
| 02-03.txt | AC | 1 ms | 3732 KiB |
| 02-04.txt | AC | 1 ms | 3528 KiB |
| 02-05.txt | AC | 1 ms | 3592 KiB |
| 02-06.txt | AC | 1 ms | 3496 KiB |
| 02-07.txt | AC | 1 ms | 3524 KiB |
| 02-08.txt | AC | 4 ms | 3928 KiB |
| 02-09.txt | AC | 1 ms | 3564 KiB |
| 02-10.txt | AC | 1 ms | 3732 KiB |
| 03-01.txt | AC | 356 ms | 221780 KiB |
| 03-02.txt | AC | 354 ms | 221904 KiB |
| 03-03.txt | AC | 354 ms | 221972 KiB |
| 03-04.txt | AC | 356 ms | 221892 KiB |
| 03-05.txt | AC | 354 ms | 221928 KiB |
| 03-06.txt | AC | 14 ms | 11752 KiB |
| 03-07.txt | AC | 1 ms | 3484 KiB |
| 03-08.txt | AC | 1 ms | 3572 KiB |
| 03-09.txt | AC | 697 ms | 238924 KiB |
| 04-01.txt | AC | 15 ms | 11800 KiB |
| 04-02.txt | AC | 15 ms | 11880 KiB |
| 04-03.txt | AC | 18 ms | 12164 KiB |
| 04-04.txt | AC | 18 ms | 12108 KiB |
| 04-05.txt | AC | 204 ms | 18604 KiB |
| 04-06.txt | AC | 15 ms | 11652 KiB |
| 04-07.txt | AC | 15 ms | 11708 KiB |
| 04-08.txt | AC | 19 ms | 12308 KiB |
| 04-09.txt | AC | 260 ms | 18028 KiB |
| 04-10.txt | AC | 11 ms | 11780 KiB |
| 04-11.txt | AC | 17 ms | 12112 KiB |
| 04-12.txt | AC | 15 ms | 11932 KiB |
| 04-13.txt | AC | 13 ms | 11640 KiB |
| 05-01.txt | AC | 442 ms | 221304 KiB |
| 05-02.txt | AC | 439 ms | 223660 KiB |
| 05-03.txt | AC | 608 ms | 226868 KiB |
| 05-04.txt | AC | 600 ms | 232404 KiB |
| 05-05.txt | AC | 354 ms | 222040 KiB |
| 05-06.txt | AC | 357 ms | 221628 KiB |
| 05-07.txt | AC | 353 ms | 221896 KiB |
| 05-08.txt | AC | 699 ms | 234664 KiB |
| 05-09.txt | AC | 260 ms | 217972 KiB |
| 05-10.txt | AC | 564 ms | 230316 KiB |
| 05-11.txt | AC | 449 ms | 225452 KiB |
| 05-12.txt | AC | 340 ms | 219500 KiB |
| sample-01.txt | AC | 1 ms | 3444 KiB |
| sample-02.txt | AC | 1 ms | 3408 KiB |
| sample-03.txt | AC | 1 ms | 3516 KiB |
| sample-04.txt | AC | 1 ms | 3364 KiB |
| sample-05.txt | AC | 1 ms | 3428 KiB |