제출 #1317780

#제출 시각아이디문제언어결과실행 시간메모리
1317780spetr모자이크 (IOI24_mosaic)C++20
컴파일 에러
0 ms0 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long const ll mmod = 998244353; #define vl vector<long long> #define vll vector<vector<long long>> #define pl pair<long long, long long> #define vb vector<bool> std::vector<long long> mosaic( std::vector<int> X, std::vector<int> Y, std::vector<int> T, std::vector<int> B, std::vector<int> L, std::vector<int> R){ ll n, q; n = X.size(); q = T.size(); vll row3; vll col3; vl x1, y1; for (ll i = 0; i <n; i++){ x1.push_back(X[i]); y1.push_back(Y[i]); } row3.push_back(x1); col3.push_back(y1); // Oprava: Kontrola velikosti N, aby nedošlo k přístupu mimo paměť pro N=1,2 if (n > 1) { row3.push_back({(ll)Y[1]}); } if (n > 2) { row3.push_back({(ll)Y[2]}); } if (n > 1) { col3.push_back({(ll)X[1]}); } if (n > 2) { col3.push_back({(ll)X[2]}); } for (ll i = 1; i < 3; i++){ if (i >= row3.size()) break; // Oprava: Ochrana loopu pro malé N for (ll j = 1; j < n; j++){ ll v1 = 0; ll v2 = 0; // Podmínka pro generování musí být bezpečná if (row3[i][j-1] == 0 && row3[i-1][j] == 0){ v1 = 1; } if (col3[i][j-1] == 0 && col3[i-1][j] == 0){ v2 = 1; } row3[i].push_back(v1); col3[i].push_back(v2); } } vl s1, s2, s3; // Flattening s1 (Layer 0) for (ll i = n-1; i>=0; i--){ s1.push_back(col3[0][i]); } for (ll i = 1; i < n; i++){ s1.push_back(row3[0][i]); } // Flattening s2 (Layer 1) if (n > 1) { // Ochrana pro malé N for (ll i = n-1; i>=1; i--){ s2.push_back(col3[1][i]); } for (ll i = 2; i < n; i++){ s2.push_back(row3[1][i]); } } // Flattening s3 (Layer 2+) if (n > 2) { // Ochrana pro malé N for (ll i = n-1; i>=2; i--){ s3.push_back(col3[2][i]); } for (ll i = 3; i < n; i++){ s3.push_back(row3[2][i]); } } vl p1, p2, p3; p1 = p2 = p3 = {0}; for (ll i = 0; i < s1.size(); i++){ p1.push_back(s1[i] + p1[i]); } for (ll i = 0; i < s2.size(); i++){ p2.push_back(s2[i] + p2[i]); } for (ll i = 0; i < s3.size(); i++){ p3.push_back(s3[i] + p3[i]); } // Oprava: Odstraněno q2. q1 nyní slouží pro vážený součet (S[i] * (i+1)) vl q1; q1 = {0}; for (ll i = 0; i < s3.size(); i++){ q1.push_back(q1[i] + s3[i]*(i+1)); } vl ans; for (ll i = 0; i < q; i++){ ll l, r, u, d; l = L[i]; r = R[i]; u = T[i]; d = B[i]; ll a, b; ll suma = 0; //Layer1 (Index 0) b = 0; a = 1e9; if (l == 0){ a = min(a, n-d-1); b = max(b, n-u); } if (u == 0){ a = min(a, n + l - 1); b = max(b, n + r); } if (a < b){ suma += p1[b] - p1[a]; } //Layer2 (Index 1) b = 0; a = 1e9; if (l <= 1 && r >= 1){ a = min(a, n-d-1); b = max(b, n-max(u,1ll)); } if (u <= 1 && d >= 1){ a = min(a, n + max(l,1ll) - 3); b = max(b, n + r - 2); } if (a < b && s2.size() > 0){ // check if s2 exists // Ochrana bounds, protože s2 může být prázdné nebo kratší a = max(0ll, a); b = min((ll)p2.size()-1, b); if(a < b) suma += p2[b] - p2[a]; } // Layer3 (Recursive) if (r >= 2 && d >= 2 && s3.size() > 0){ ll l_curr = max(2ll, l); ll u_curr = max(2ll, u); // Zde a, b jsou indexy do s3 ll a = l_curr - 2 + (n-1)-d; ll b = r - 2 + n - u_curr; // b je zde v logice kódu spíše 'poslední index', ale pro prefix sumy potřebujeme 'exclusive end'. // V původním kódu jste používali p3[b] - p3[b-t], což naznačuje, že 'b' v array logice je exclusive bound (index + 1). // Původní výpočet: b = r - 2 + n - u. // Max diagonála je r - u. Index v s3 je (r-u) + n - 3. // Vaše b = (r-u)

컴파일 시 표준 에러 (stderr) 메시지

mosaic.cpp: In function 'std::vector<long long int> mosaic(std::vector<int>, std::vector<int>, std::vector<int>, std::vector<int>, std::vector<int>, std::vector<int>)':
mosaic.cpp:144:39: error: expected '}' at end of input
  144 |             ll b = r - 2 + n - u_curr;
      |                                       ^
mosaic.cpp:139:47: note: to match this '{'
  139 |         if (r >= 2 && d >= 2 && s3.size() > 0){
      |                                               ^
mosaic.cpp:144:39: error: expected '}' at end of input
  144 |             ll b = r - 2 + n - u_curr;
      |                                       ^
mosaic.cpp:101:31: note: to match this '{'
  101 |     for (ll i = 0; i < q; i++){
      |                               ^
mosaic.cpp:144:39: error: expected '}' at end of input
  144 |             ll b = r - 2 + n - u_curr;
      |                                       ^
mosaic.cpp:15:44: note: to match this '{'
   15 |     std::vector<int> L, std::vector<int> R){
      |                                            ^
mosaic.cpp:144:39: warning: no return statement in function returning non-void [-Wreturn-type]
  144 |             ll b = r - 2 + n - u_curr;
      |                                       ^