| Task: | Kolmijako |
| Sender: | pupukani |
| Submission time: | 2025-09-05 19:56:14 +0300 |
| Language: | C++ (C++17) |
| Status: | READY |
| Result: | 23 |
| group | verdict | score |
|---|---|---|
| #1 | ACCEPTED | 23 |
| #2 | TIME LIMIT EXCEEDED | 0 |
| #3 | TIME LIMIT EXCEEDED | 0 |
| test | verdict | time | group | |
|---|---|---|---|---|
| #1 | ACCEPTED | 0.19 s | 1, 2, 3 | details |
| #2 | TIME LIMIT EXCEEDED | -- | 2, 3 | details |
| #3 | TIME LIMIT EXCEEDED | -- | 3 | details |
Compiler report
input/code.cpp: In function 'int summa(std::vector<int>, int)':
input/code.cpp:10:30: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
10 | for (int i = alku; i < v.size(); ++i)
| ~~^~~~~~~~~~Code
#include <iostream>
#include <vector>
#include <numeric>
#include <sstream>
#include <algorithm>
int summa(std::vector<int> v, int alku = 0)
{
int summa = 0;
for (int i = alku; i < v.size(); ++i)
summa += v[i];
return summa;
}
std::stringstream ss;
bool solve(std::vector<int> num, size_t i, int k, std::vector<std::vector<int>> kasat)
{
if (i == num.size()) // num is "empty"
{
if (summa(kasat[0]) == summa(kasat[1]) && summa(kasat[1]) == summa(kasat[2]))
{
ss << "YES" << std::endl;
for (int j = 0; j < 3; ++j)
{
ss << kasat[j].size() << std::endl;
for (int luku : kasat[j])
ss << luku << " ";
ss << std::endl;
}
return true;
}
return false;
}
kasat[k].push_back(num[i]);
if (summa(kasat[k]) > summa(num) / 3)
return false;
int suurinsumma = summa(std::max(kasat[0], std::max(kasat[1], kasat[2])));
int pieninsumma = summa(std::min(kasat[0], std::min(kasat[1], kasat[2])));
if (suurinsumma > pieninsumma + summa(num, i + 1))
return false;
if (solve(num, i + 1, 0, kasat) == true)
return true;
if (solve(num, i + 1, 1, kasat) == true)
return true;
if (solve(num, i + 1, 2, kasat) == true)
return true;
return false;
}
int main(void)
{
int t;
std::cin >> t;
for (int i = 0; i < t; ++i)
{
int n;
std::cin >> n;
std::vector<int> num(n);
std::iota(num.begin(), num.end(),1);
//std::reverse(num.begin(), num.end());
std::vector<std::vector<int>> kasat(3);
if (solve(num, 0, 0, kasat))
continue;
if (solve(num, 0, 1, kasat))
continue;
if (solve(num, 0, 2, kasat))
continue;
ss << "NO" << std::endl;
}
std::cout << ss.str();
}
Test details
Test 1
Group: 1, 2, 3
Verdict: ACCEPTED
| input |
|---|
| 15 1 2 3 4 ... |
| correct output |
|---|
| NO NO NO NO YES ... |
| user output |
|---|
| NO NO NO NO YES ... Truncated |
Test 2
Group: 2, 3
Verdict: TIME LIMIT EXCEEDED
| input |
|---|
| 100 1 2 3 4 ... |
| correct output |
|---|
| NO NO NO NO YES ... |
| user output |
|---|
| (empty) |
Test 3
Group: 3
Verdict: TIME LIMIT EXCEEDED
| input |
|---|
| 100 564 895 546 980 ... |
| correct output |
|---|
| YES 188 1 6 12 7 18 13 24 19 30 25 36 ... |
| user output |
|---|
| (empty) |
