Task: | Ruudukko |
Sender: | Laserr |
Submission time: | 2022-11-06 14:26:04 +0200 |
Language: | C++ (C++11) |
Status: | READY |
Result: | 28 |
group | verdict | score |
---|---|---|
#1 | ACCEPTED | 28 |
#2 | WRONG ANSWER | 0 |
#3 | WRONG ANSWER | 0 |
test | verdict | time | group | |
---|---|---|---|---|
#1 | ACCEPTED | 0.00 s | 1, 2, 3 | details |
#2 | ACCEPTED | 0.00 s | 1, 2, 3 | details |
#3 | ACCEPTED | 0.00 s | 1, 2, 3 | details |
#4 | ACCEPTED | 0.01 s | 2, 3 | details |
#5 | WRONG ANSWER | 0.01 s | 2, 3 | details |
#6 | WRONG ANSWER | 0.01 s | 2, 3 | details |
#7 | ACCEPTED | 0.27 s | 3 | details |
#8 | WRONG ANSWER | 0.44 s | 3 | details |
#9 | WRONG ANSWER | 0.51 s | 3 | details |
Code
#include<iostream> #include<vector> #include<algorithm> using namespace std; struct ruutu { unsigned long long first; unsigned long long second; unsigned long long x; unsigned long long y; ruutu(unsigned long long first_, unsigned long long second_, unsigned long long x_, unsigned long long y_) { first = first_; second = second_; x = x_; y = y_; } bool operator<(const ruutu& p) { if (first != p.first) return first < p.first; else if (y != p.y) return y < p.y; else return x < p.x; } }; struct rivi { unsigned long long summa, valiaika, edellinen; rivi() { summa = 0; valiaika = 0; edellinen = 0; } }; int main() { unsigned long long n; cin >> n; unsigned long long s = 0; vector<ruutu> v; vector<rivi> r_x(n); vector<rivi> r_y(n); for (unsigned long long i = 0; i < n; i++) { // y for (unsigned long long j = 0; j < n; j++) { // x unsigned long long x; cin >> x; v.push_back(ruutu(x, 1, j, i)); } } sort(v.begin(), v.end()); for (ruutu i : v) { if (i.first > r_x[i.x].edellinen) { r_x[i.x].summa += r_x[i.x].valiaika; r_x[i.x].valiaika = 0; } if (i.first > r_y[i.y].edellinen) { r_y[i.y].summa += r_y[i.y].valiaika; r_y[i.y].valiaika = 0; } i.second += r_x[i.x].summa; i.second += r_y[i.y].summa; r_x[i.x].edellinen = i.first; r_y[i.y].edellinen = i.first; s += i.second; if (i.first == r_x[i.x].edellinen) r_x[i.x].valiaika += i.second; if (i.first == r_y[i.y].edellinen) r_y[i.y].valiaika += i.second; } unsigned long long mod = 1000000007; cout << s % mod; //rivipari idea! laskee rivien summa, josta voi suoraan katsoa rivin summa. Toiseen kohtaan tulee summa ja toiseen edellinen numero }
Test details
Test 1
Group: 1, 2, 3
Verdict: ACCEPTED
input |
---|
3 1 1 1 1 1 1 1 1 1 |
correct output |
---|
9 |
user output |
---|
9 |
Test 2
Group: 1, 2, 3
Verdict: ACCEPTED
input |
---|
3 1 2 3 6 5 4 7 8 9 |
correct output |
---|
135 |
user output |
---|
135 |
Test 3
Group: 1, 2, 3
Verdict: ACCEPTED
input |
---|
3 7 8 1 4 5 4 3 9 6 |
correct output |
---|
57 |
user output |
---|
57 |
Test 4
Group: 2, 3
Verdict: ACCEPTED
input |
---|
100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ... |
correct output |
---|
10000 |
user output |
---|
10000 |
Test 5
Group: 2, 3
Verdict: WRONG ANSWER
input |
---|
100 1 2 3 4 5 6 7 8 9 10 11 12 13 ... |
correct output |
---|
187458477 |
user output |
---|
971094161 |
Test 6
Group: 2, 3
Verdict: WRONG ANSWER
input |
---|
100 2995 8734 1018 2513 7971 5063 ... |
correct output |
---|
964692694 |
user output |
---|
458862793 |
Test 7
Group: 3
Verdict: ACCEPTED
input |
---|
1000 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ... |
correct output |
---|
1000000 |
user output |
---|
1000000 |
Test 8
Group: 3
Verdict: WRONG ANSWER
input |
---|
1000 1 2 3 4 5 6 7 8 9 10 11 12 13 ... |
correct output |
---|
229147081 |
user output |
---|
61611918 |
Test 9
Group: 3
Verdict: WRONG ANSWER
input |
---|
1000 520283 805991 492643 75254 527... |
correct output |
---|
951147313 |
user output |
---|
31396065 |