| Task: | Niitty |
| Sender: | adex720 |
| Submission time: | 2026-09-15 19:25:14 +0300 |
| Language: | C++ (C++20) |
| Status: | COMPILE ERROR |
Compiler report
input/code.cpp: In function 'int main()':
input/code.cpp:17:10: warning: unused variable 'c' [-Wunused-variable]
17 | char c;
| ^
In file included from /usr/include/c++/13/string:43,
from /usr/include/c++/13/bitset:52,
from /usr/include/x86_64-linux-gnu/c++/13/bits/stdc++.h:52,
from input/code.cpp:4:
/usr/include/c++/13/bits/allocator.h: In destructor 'constexpr std::__cxx11::basic_string<char>::_Alloc_hider::~_Alloc_hider()':
/usr/include/c++/13/bits/allocator.h:184:7: error: inlining failed in call to 'always_inline' 'constexpr std::allocator< <template-parameter-1-1> >::~allocator() noexcept [with _Tp = char]': target specific option mismatch
184 | ~allocator() _GLIBCXX_NOTHROW { }
| ^
In file included from /usr/include/c++/13/string:54:
/usr/include/c++/13/bits/basic_string.h:181:14: note: called from here
181 | struct _Alloc_hider : allocator_type // TODO check __is_final
|...Code
#pragma GCC optimize("03")
#pragma GCC target("arch=skylake")
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
int maarat[502][501][26];
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
ll summa = 0ll;
char c;
string s;
bool kelpo;
int n, min, max, keski;
cin >> n;
int sisaltyvat[26];
// summataulukon nollaus
for (int y = 0; y <= n; y++)
{
for (int x = 0; x <= n; x++)
{
for (int i = 0; i < 26; i++)
{
maarat[y][x][i] = 0;
}
}
}
for (int i = 0; i < 26; i++)
{
sisaltyvat[i] = 0;
}
// syötteen kukkien merkitseminen
for (int y = 1; y <= n; y++)
{
cin >> s;
for (int x = 0; x < n; x++)
{
maarat[y][x + 1][s[x] - 'A'] = 1;
sisaltyvat[s[x] - 'A'] = 1;
}
}
// ensimmäisen rivin ja sarakkeen nollaus
for (int y = 1; y <= n; y++)
{
for (int i = 0; i < 26; i++)
{
maarat[y][0][i] = sisaltyvat[i] ? maarat[y][0][i] + maarat[y - 1][0][i] : y;
}
}
for (int x = 1; x <= n; x++)
{
for (int i = 0; i < 26; i++)
{
maarat[0][x][i] = sisaltyvat[i] ? maarat[0][x][i] + maarat[0][x - 1][i] : x;
}
}
// summien lasekminen
for (int y = 1; y <= n; y++)
{
for (int x = 1; x <= n; x++)
{
for (int i = 0; i < 26; i++)
{
maarat[y][x][i] += maarat[y - 1][x][i] + maarat[y][x - 1][i] - maarat[y - 1][x - 1][i] + 1 - sisaltyvat[i];
}
}
}
// alin rivi täytyeen hyvin suuria lukuja, jotta tilanteet, joissa mikään korkeus ei ole kelvollinen, käsitellään oikein
for (int x = 0; x <= n; x++)
{
for (int i = 0; i < 26; i++)
{
maarat[501][x][i] = INT_MAX;
}
}
// käydään läpi jokainen ruutu, ja lasketaan, monenko mahdollisen alueen vasen yläkulma se on
for (int alkuY = 0; alkuY < n; alkuY++)
{
for (int alkuX = 0; alkuX < n; alkuX++)
{
// käydään kaikki leveydet läpi, ja etsitään binäärihaulla minimikorkeus
max = n;
for (int loppuX = alkuX; loppuX < n; loppuX++)
{
min = alkuY;
while (max > min)
{
keski = (min + max) >> 1;
kelpo = true;
for (int c = 0; c < 26; c++)
{
if (maarat[keski + 1][loppuX + 1][c] - maarat[keski + 1][alkuX][c] - maarat[alkuY][loppuX + 1][c] + maarat[alkuY][alkuX][c] == 0)
{
kelpo = false;
break;
}
}
if (kelpo)
max = keski;
else
min = keski + 1;
}
max = min;
summa += (n - min);
}
}
}
cout << summa;
return 0;
}
