Submission #70789188
Source Code Expand
/*
Compete against Yourself.
Author - Aryan (@aryanc403)
*/
/*
Credits -
Atcoder library - https://atcoder.github.io/ac-library/production/document_en/ (namespace atcoder)
Github source code of library - https://github.com/atcoder/ac-library/tree/master/atcoder
https://codeforces.com/contest/4/submission/150120627
*/
#ifdef ARYANC403
#include <header.h>
#else
#pragma GCC optimize ("Ofast")
// #pragma GCC target ("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx")
#pragma GCC target ("sse,sse2,mmx")
#pragma GCC optimize ("-ffloat-store")
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#define dbg(args...) 42;
#define endl "\n"
#endif
// y_combinator from @neal template https://codeforces.com/contest/1553/submission/123849801
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0200r0.html
template<class Fun> class y_combinator_result {
Fun fun_;
public:
template<class T> explicit y_combinator_result(T &&fun): fun_(std::forward<T>(fun)) {}
template<class ...Args> decltype(auto) operator()(Args &&...args) { return fun_(std::ref(*this), std::forward<Args>(args)...); }
};
template<class Fun> decltype(auto) y_combinator(Fun &&fun) { return y_combinator_result<std::decay_t<Fun>>(std::forward<Fun>(fun)); }
using namespace std;
#define fo(i,n) for(i=0;i<(n);++i)
#define repA(i,j,n) for(i=(j);i<=(n);++i)
#define repD(i,j,n) for(i=(j);i>=(n);--i)
#define all(x) begin(x), end(x)
#define sz(x) ((lli)(x).size())
#define eb emplace_back
#define X first
#define Y second
using lli = long long int;
using mytype = long double;
using ii = pair<lli,lli>;
using vii = vector<ii>;
using vi = vector<lli>;
template <class T>
using ordered_set = __gnu_pbds::tree<T,__gnu_pbds::null_type,less<T>,__gnu_pbds::rb_tree_tag,__gnu_pbds::tree_order_statistics_node_update>;
// X.find_by_order(k) return kth element. 0 indexed.
// X.order_of_key(k) returns count of elements strictly less than k.
// namespace Re = std::ranges;
// namespace Ve = std::ranges::views;
const auto start_time = std::chrono::high_resolution_clock::now();
void aryanc403()
{
auto end_time = std::chrono::high_resolution_clock::now();
std::chrono::duration<double> diff = end_time-start_time;
cerr<<"Time Taken : "<<diff.count()<<"\n";
}
const lli INF = 0xFFFFFFFFFFFFFFFLL;
const lli SEED=chrono::steady_clock::now().time_since_epoch().count();
mt19937_64 rng(SEED);
inline lli rnd(lli l=0,lli r=INF)
{return uniform_int_distribution<lli>(l,r)(rng);}
class CMP
{public:
bool operator()(ii a , ii b) //For min priority_queue .
{ return ! ( a.X < b.X || ( a.X==b.X && a.Y <= b.Y )); }};
void add( map<lli,lli> &m, lli x,lli cnt=1)
{
auto jt=m.find(x);
if(jt==m.end()) m.insert({x,cnt});
else jt->Y+=cnt;
}
void del( map<lli,lli> &m, lli x,lli cnt=1)
{
auto jt=m.find(x);
if(jt->Y<=cnt) m.erase(jt);
else jt->Y-=cnt;
}
bool cmp(const ii &a,const ii &b)
{
return a.X<b.X||(a.X==b.X&&a.Y<b.Y);
}
const string sr = "LRUD";
vector<vi> costs = {
{-1,'A','C','B'},
{'A',-1,'B','C'},
{'C','B',-1,'A'},
{'B','C','A',-1},
};
vector<vi> dir = {
{0,-1,1},
{0,1,0},
{-1,0,3},
{1,0,2},
};
int main(void) {
ios_base::sync_with_stdio(false);cin.tie(NULL);
// freopen("txt.in", "r", stdin);
// freopen("txt.out", "w", stdout);
// cout<<std::fixed<<std::setprecision(35);
// Ve::iota(1, 6) | Ve::transform([](int x) { return x * 2; }) | Ve::reverse | Ve::take(3)
lli T=1;
cin>>T;
while(T--)
{
lli n,m;
cin>>n>>m;
vector<string> a(n);
for(auto &s:a)
cin>>s;
dbg(a);
queue<lli> pq,nxt;
pq.push(0);
lli cur = 0,ans=INF;
vi dp(n*m*4,INF);
dp[0]=0;
while(true){
if(pq.empty()&&nxt.empty())
break;
if(pq.empty()){
pq.swap(nxt);
cur++;
}
const auto idx = pq.front();pq.pop();
if(dp[idx]<cur)
continue;
const lli x=(idx/4)/m,y=(idx/4)%m,d1=idx%4;
for(lli d2=0;d2<4;d2++){
if(costs[d1][d2]==-1)
continue;
const lli nx = x+dir[d2][0],ny=y+dir[d2][1],nd=dir[d2][2];
const lli c=(costs[d1][d2]!=a[x][y])+cur;
dbg(x,y,sr[d1],nx,ny,sr[nd],c);
if(nx==n-1&&ny==m&&nd==0){
dbg(nx,ny,nd,c);
ans=min(ans,c);
}
if(nx<0||nx>=n||ny<0||ny>=m)
continue;
const lli ni = nx*4*m+ny*4+nd;
if(dp[ni]<=c)
continue;
dp[ni]=c;
if(c==cur)
pq.push(ni);
else
nxt.push(ni);
}
}
cout<<ans<<endl;
} aryanc403();
return 0;
}
Submission Info
| Submission Time |
|
| Task |
E - Reflection on Grid |
| User |
aryanc403 |
| Language |
C++23 (GCC 15.2.0) |
| Score |
500 |
| Code Size |
5021 Byte |
| Status |
AC |
| Exec Time |
42 ms |
| Memory |
15940 KiB |
Compile Error
./Main.cpp: In function 'int main()':
./Main.cpp:22:26: warning: statement has no effect [-Wunused-value]
22 | #define dbg(args...) 42;
| ^~
./Main.cpp:128:5: note: in expansion of macro 'dbg'
128 | dbg(a);
| ^~~
./Main.cpp:22:26: warning: statement has no effect [-Wunused-value]
22 | #define dbg(args...) 42;
| ^~
./Main.cpp:151:13: note: in expansion of macro 'dbg'
151 | dbg(x,y,sr[d1],nx,ny,sr[nd],c);
| ^~~
./Main.cpp:22:26: warning: statement has no effect [-Wunused-value]
22 | #define dbg(args...) 42;
| ^~
./Main.cpp:153:17: note: in expansion of macro 'dbg'
153 | dbg(nx,ny,nd,c);
| ^~~
Judge Result
| Set Name |
Sample |
All |
| Score / Max Score |
0 / 0 |
500 / 500 |
| Status |
|
|
| Set Name |
Test Cases |
| Sample |
00_sample_00.txt |
| All |
00_sample_00.txt, 01_test_00.txt, 01_test_01.txt, 01_test_02.txt, 01_test_03.txt, 01_test_04.txt, 01_test_05.txt, 01_test_06.txt, 01_test_07.txt, 01_test_08.txt, 01_test_09.txt, 01_test_10.txt, 01_test_11.txt, 01_test_12.txt, 01_test_13.txt, 01_test_14.txt, 01_test_15.txt, 01_test_16.txt, 01_test_17.txt, 01_test_18.txt, 01_test_19.txt, 01_test_20.txt, 01_test_21.txt, 01_test_22.txt, 01_test_23.txt, 01_test_24.txt, 01_test_25.txt, 01_test_26.txt, 01_test_27.txt, 01_test_28.txt, 01_test_29.txt, 01_test_30.txt, 01_test_31.txt, 01_test_32.txt, 01_test_33.txt, 01_test_34.txt |
| Case Name |
Status |
Exec Time |
Memory |
| 00_sample_00.txt |
AC |
1 ms |
3904 KiB |
| 01_test_00.txt |
AC |
21 ms |
3912 KiB |
| 01_test_01.txt |
AC |
26 ms |
3816 KiB |
| 01_test_02.txt |
AC |
29 ms |
3908 KiB |
| 01_test_03.txt |
AC |
29 ms |
4028 KiB |
| 01_test_04.txt |
AC |
30 ms |
4028 KiB |
| 01_test_05.txt |
AC |
31 ms |
4152 KiB |
| 01_test_06.txt |
AC |
30 ms |
4360 KiB |
| 01_test_07.txt |
AC |
31 ms |
4388 KiB |
| 01_test_08.txt |
AC |
7 ms |
10116 KiB |
| 01_test_09.txt |
AC |
13 ms |
15824 KiB |
| 01_test_10.txt |
AC |
20 ms |
9936 KiB |
| 01_test_11.txt |
AC |
23 ms |
12752 KiB |
| 01_test_12.txt |
AC |
27 ms |
10116 KiB |
| 01_test_13.txt |
AC |
29 ms |
11784 KiB |
| 01_test_14.txt |
AC |
33 ms |
9972 KiB |
| 01_test_15.txt |
AC |
33 ms |
10244 KiB |
| 01_test_16.txt |
AC |
35 ms |
10248 KiB |
| 01_test_17.txt |
AC |
36 ms |
10372 KiB |
| 01_test_18.txt |
AC |
42 ms |
12400 KiB |
| 01_test_19.txt |
AC |
42 ms |
11736 KiB |
| 01_test_20.txt |
AC |
6 ms |
9992 KiB |
| 01_test_21.txt |
AC |
6 ms |
10120 KiB |
| 01_test_22.txt |
AC |
11 ms |
15940 KiB |
| 01_test_23.txt |
AC |
11 ms |
15880 KiB |
| 01_test_24.txt |
AC |
8 ms |
10100 KiB |
| 01_test_25.txt |
AC |
12 ms |
12932 KiB |
| 01_test_26.txt |
AC |
11 ms |
9972 KiB |
| 01_test_27.txt |
AC |
12 ms |
10192 KiB |
| 01_test_28.txt |
AC |
13 ms |
13192 KiB |
| 01_test_29.txt |
AC |
13 ms |
9988 KiB |
| 01_test_30.txt |
AC |
24 ms |
9924 KiB |
| 01_test_31.txt |
AC |
10 ms |
11480 KiB |
| 01_test_32.txt |
AC |
10 ms |
11472 KiB |
| 01_test_33.txt |
AC |
36 ms |
13120 KiB |
| 01_test_34.txt |
AC |
32 ms |
13252 KiB |