Mendo Judge Discussion Board - Forums
Search
Recent Topics
Hottest Topics
Member Listing
Back to home page
Барок
Forum Index
»
Задачи од национални натпревари
Author
Message
07/03/2019 21:26:44
Subject:
Барок
floreloriz123
Joined: 24/01/2017 13:21:27
Messages: 10
Offline
Ако некој знае зошто не ми поминува кодот на 4/20 тест случаи?
Edit: Ја најдов грешката, видете исправка во main. Но зошто не работи без тоа?
#include <iostream> #include <vector> #include <algorithm> #include <cmath> #include <cstring> #include <queue> #include <list> #include <stack> #include <string> #include <sstream> #include <iomanip> #include <map> #include <climits> #include <cfloat> #include <cstdlib> #define PI 3.1415926535 #define pb push_back #define mp make_pair #define MINE min_element #define MAXE max_element #define sortBySec [](pair<int,int>a,pair<int,int>b){return a.second>b.second;} using namespace std; const int MAXN = 101; const int MAXV = 1000000000; vector <vector <int> > graph(MAXN*10, vector <int> (MAXN*10, MAXV)); int rows, cols, n, m; struct state { int row, col; }; bool validMove(state next) { return (next.row >= 0 && next.row < rows && next.col >= 0 && next.col < cols); } state makeMove(int row, int col) { state move; move.row = row; move.col = col; return move; } vector <state> possibleMoves(state node) { vector <state> moves; moves.pb(makeMove(node.row, node.col-1)); moves.pb(makeMove(node.row, node.col+1)); moves.pb(makeMove(node.row-1, node.col)); moves.pb(makeMove(node.row+1, node.col)); return moves; } int bfs(vector <state> start) { queue <state> q; for (auto i : start) { q.push({i.row, i.col}); } int barokStyle = m; int months = 0; while (!q.empty()) { auto node = q.front(); q.pop(); vector <state> moves = possibleMoves(node); if (barokStyle >= n) break; for (auto next : moves) { if (validMove(next)) { if (graph[next.row][next.col] == MAXV) { graph[next.row][next.col] = graph[node.row][node.col]+1; q.push(next); barokStyle++; if (graph[next.row][next.col] > months) { months = graph[next.row][next.col]; } // if (barokStyle >= n) break; } } } } return months; } int main() { cin >> rows >> cols >> n >> m; // m is initial, n is needed; vector <state> alreadyInBarokStyle; for (int i = 0; i < m; i++) { int r, c; cin >> r >> c; r--; c--; // ОВА ГО НЕМАВ. Но зошто не работи без ова? alreadyInBarokStyle.pb({r, c}); graph[r][c] = 0; } if (m >= n) cout << 0; else cout << bfs(alreadyInBarokStyle); // cout << endl << endl; // for (int i = 0; i < rows; i++) { // for (int j = 0; j < cols; j++) { // cout << graph[i][j] << " "; // } // cout << endl; // } return 0; }
This message was edited 2 times. Last update was at 07/03/2019 22:49:44
08/03/2019 11:07:58
Subject:
Re:Барок
despotovski01
Joined: 23/02/2014 14:36:12
Messages: 37
Offline
Тоа е така бидејќи во validMove координатите очекуваш да имаат 0-базиран индекс, но претходно тоа не беше така. За да работи како што било пред промената, validMove треба да изгледа вака:
bool validMove(state next) { return (next.row >= 1 && next.row <= rows && next.col >= 1 && next.col <= cols); }
Forum Index
»
Задачи од национални натпревари
Go to:
Select a forum
Добродојдовте!
Општа дискусија
Задачи од национални натпревари
Задачи од меѓународни натпревари
Други задачи
Регионални натпревари
Државни натпревари
Македонски Олимпијади
Други натпревари
Pascal
C/C++
Јава
Други јазици
Powered by
JForum 2.1.8
©
JForum Team