Submission #477640

#TimeUsernameProblemLanguageResultExecution timeMemory
477640uroskMecho (IOI09_mecho)C++14
100 / 100
326 ms16184 KiB
// __builtin_popcount(x) broj bitova // __builtin_popcountll(x) long long #define here cerr<<"---------------------------\n" #include "bits/stdc++.h" #include <ext/pb_ds/tree_policy.hpp> #include <ext/pb_ds/assoc_container.hpp> #define ld double #define ll long long #define ull unsigned long long #define llinf 100000000000000000LL // 10^17 #define iinf 2000000000 // 2*10^9 #define pb push_back #define popb pop_back #define fi first #define sc second #define endl '\n' #define pii pair<int,int> #define pll pair<ll,ll> #define pld pair<ld,ld> #define sz(a) int(a.size()) #define all(a) a.begin(),a.end() #define rall(a) a.begin(),a.end(),greater<int>() #define getunique(v) {sort(all(v)); v.erase(unique(all(v)), v.end());} using namespace std; using namespace __gnu_pbds; typedef tree<int,null_type,less<int>,rb_tree_tag,tree_order_statistics_node_update> ordered_set; void setIO(string inoutname) { freopen((inoutname+".in").c_str(),"r",stdin); freopen((inoutname+".out").c_str(),"w",stdout); } #define mod 1 ll gcd(ll a, ll b) { if(b==0) return a; if(a==0) return b; if(a>=b) return gcd(a%b,b); return gcd(a,b%a); } ll lcm(ll a,ll b){ return (a/gcd(a,b))*b; } ll add(ll a,ll b){ a+=b; a+=mod; if(a>=mod) a%=mod; return a; } ll mul(ll a,ll b){return(a*b)%mod;} #define maxn 805 ll n,s; ll a[maxn][maxn]; ll dm[maxn][maxn]; ll dh[maxn][maxn]; ll conv(char c){ if(c=='T') return 0; if(c=='G') return 1; if(c=='M') return 2; if(c=='D') return 3; if(c=='H') return 4; } vector<ll> dx = {0,0,-1,1}; vector<ll> dy = {1,-1,0,0}; vector<pll> hive; ll sx,sy,ex,ey; bool valid(ll x,ll y){return x>=1&&x<=n&&y>=1&&y<=n;} bool moe(ll t){ if(t*s>=dh[sx][sy]) return 0; for(ll i = 1;i<=n;i++) for(ll j = 1;j<=n;j++) dm[i][j] = llinf; dm[sx][sy] = t*s; queue<pll> q; q.push({sx,sy}); while(!q.empty()){ pll p = q.front(); q.pop(); ll x = p.fi,y = p.sc; if(a[x][y]==3) return 1; for(ll i = 0;i<4;i++){ ll x1 = x + dx[i]; ll y1 = y + dy[i]; if(!valid(x1,y1)||dm[x1][y1]!=llinf||dh[x1][y1]<=dm[x][y]+1||a[x][y]==0) continue; dm[x1][y1] = dm[x][y]+1; q.push({x1,y1}); } } return 0; } ll bs(){ ll l = 0,r = n*n/2,mid,rez = -1; while(l<=r){ mid = (l+r)/2; if(moe(mid)){ rez = mid; l = mid+1; }else r = mid-1; } return rez; } void tc(){ ios_base::sync_with_stdio(false);cerr.tie(0);cout.tie(0);cin.tie(0); cin >> n >> s; for(ll i = 1;i<=n;i++){ string s1; cin >> s1; for(ll j = 1;j<=n;j++){ a[i][j] = conv(s1[j-1]); if(a[i][j]==2){ sx = i; sy = j; a[i][j] = 1; } if(a[i][j]==3){ ex = i; ey = j; } if(a[i][j]==4){ hive.pb({i,j}); } } } for(ll i = 1;i<=n;i++) for(ll j = 1;j<=n;j++) dh[i][j] = llinf; queue<pll> q; for(pll p : hive){ dh[p.fi][p.sc] = 0; q.push(p); } while(!q.empty()){ pll p = q.front(); q.pop(); ll x = p.fi,y = p.sc; for(ll i = 0;i<4;i++){ ll x1 = x + dx[i]; ll y1 = y + dy[i]; if(!valid(x1,y1)||a[x1][y1]!=1||dh[x1][y1]!=llinf) continue; dh[x1][y1] = dh[x][y]+s; q.push({x1,y1}); } } dh[ex][ey] = llinf; cout<<bs()<<endl; } int main(){ ios_base::sync_with_stdio(false);cerr.tie(0);cout.tie(0);cin.tie(0); //setIO("lol"); int t; t = 1; while(t--){ tc(); } return 0; }

Compilation message (stderr)

mecho.cpp: In function 'void setIO(std::string)':
mecho.cpp:32:9: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   32 |  freopen((inoutname+".in").c_str(),"r",stdin);
      |  ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
mecho.cpp:33:13: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   33 |      freopen((inoutname+".out").c_str(),"w",stdout);
      |      ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
mecho.cpp: In function 'long long int conv(char)':
mecho.cpp:64:1: warning: control reaches end of non-void function [-Wreturn-type]
   64 | }
      | ^
#Verdict Execution timeMemoryGrader output
Fetching results...