Submission #91708

#TimeUsernameProblemLanguageResultExecution timeMemory
91708Retro3014Aliens (IOI07_aliens)C++17
60 / 100
1441 ms65536 KiB
#include <iostream> #include <algorithm> #include <vector> #include <string> #include <set> #include <map> using namespace std; typedef long long ll; int N; struct P{ ll x, y; }; typedef long long ll; struct P2{ ll x, y; }; P2 ans; P st; struct SQ{ P lu, rd; P mid; void cmid(){ mid.x=(lu.x+rd.x)/2; mid.y=(lu.y+rd.y)/2; } }; vector<P> v(1); string str; set<pair<ll, ll>> s; map<pair<ll, ll>, bool> mp; char c[100]; bool chk(ll x, ll y){ if(x<1 || x>N || y<1 || y>N) return true; return false; } bool examine(ll x, ll y){ if(chk(x, y)) return false; if(mp.find(make_pair(x, y))==mp.end()){ printf("examine %lld %lld\n", x, y); fflush(stdout); scanf("%s", c); mp[make_pair(x, y)] = (c[0]=='t'); } return mp[make_pair(x, y)]; } bool examin(P a){ return examine(a.x, a.y); } SQ now; int main(){ scanf("%d%lld%lld", &N, &st.x, &st.y); ll t=1; P a=st; while(1){ if(examine(a.x, a.y+t*2)){ t*=2; }else{ if(t==1){ if(examine(a.x, a.y+t)) a.y++; break; }else{ a.y+=t; t=1; } } } now.lu.y = a.y; a=st; t=1; while(1){ if(examine(a.x, a.y-t*2)){ t*=2; }else{ if(t==1){ if(examine(a.x, a.y-t)) a.y--; break; }else{ a.y-=t; t=1; } } } now.rd.y = a.y; a=st; t=1; while(1){ if(examine(a.x+t*2, a.y)){ t*=2; }else{ if(t==1){ if(examine(a.x+t, a.y)) a.x++; break; }else{ a.x+=t; t=1; } } } now.rd.x = a.x; a=st; t=1; while(1){ if(examine(a.x-t*2, a.y)){ t*=2; }else{ if(t==1){ if(examine(a.x-1, a.y)) a.x--; break; }else{ a.x-=t; t=1; } } } now.lu.x = a.x; now.cmid(); v[0]=now.mid; int i=0; ll M=now.rd.x-now.lu.x+1; ll dx[4]={M, M, -M, -M}, dy[4]={M, -M, M, -M}; s.insert(make_pair(v[0].x, v[0].y)); while(i<v.size()){ ans.x+=v[i].x; ans.y+=v[i].y; for(int j=0; j<4; j++){ if(!chk(v[i].x+dx[j], v[i].y+dy[j]) && s.find(make_pair(v[i].x+dx[j], v[i].y+dy[j]))==s.end() && examine(v[i].x+dx[j], v[i].y+dy[j])){ s.insert(make_pair(v[i].x+dx[j], v[i].y+dy[j])); v.push_back({v[i].x+dx[j], v[i].y+dy[j]}); } } i++; } printf("solution %lld %lld", ans.x/13, ans.y/13); fflush(stdout); }

Compilation message (stderr)

aliens.cpp: In function 'int main()':
aliens.cpp:122:12: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     while(i<v.size()){
           ~^~~~~~~~~
aliens.cpp: In function 'bool examine(ll, ll)':
aliens.cpp:43:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%s", c);
         ~~~~~^~~~~~~~~
aliens.cpp: In function 'int main()':
aliens.cpp:55:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d%lld%lld", &N, &st.x, &st.y);
     ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...