Submission #465629

#TimeUsernameProblemLanguageResultExecution timeMemory
465629MohamedAliSaidaneHandcrafted Gift (IOI20_gift)C++14
45 / 100
1559 ms21664 KiB
#include <bits/stdc++.h> #include "gift.h" using namespace std; typedef pair<int,int> pii; typedef vector<int> vi; typedef long long ll; typedef pair<ll,ll> pll; typedef tuple<int,int,int> ti; typedef unsigned long long ull; typedef long double ld; typedef vector<ll> vll; typedef pair<ld,ld> pld; #define pb push_back #define popb pop_back() #define pf push_front #define popf pop_front #define ff first #define ss second #define MOD (int)(1e8) #define INF (ll) (1e18) #define all(v) (v).begin(),(v).end() #define LSOne(S) ((S) & -(S)) ll gcd(ll a , ll b) {return b ? gcd(b , a % b) : a ;} ll lcm(ll a , ll b) {return (a * b) / gcd(a , b);} ld pointdist(ld x, ld y, ld point) { return ((x-point)*(y-point))/abs(x-y); } ld dist(ld x, ld y, ld a, ld b){ return sqrt((x-a)*(x-a) + (y-b)*(y-b)); } const int nx[4] = {0, 0, 1, -1}, ny[4] = {1, -1, 0, 0}; //East, West, South, North+ ////////////******SOLUTION******\\\\\\\\\\\ int sz; int req; vi A, B, X; string ans = ""; bool found = false; void f(string str) { if(found) return ; if(str.length() == sz) { int pref[sz+1]; pref[0] = 0; for(int i = 0; i < sz; i ++) { pref[i+1] = pref[i] + (str[i] == 'R'); } for(int j = 0; j < req; j ++) { int rs = pref[B[j]+1] - pref[A[j]]; int len = B[j] + 1 - A[j]; if(X[j] == 1) { if(rs == len || rs == 0) continue; else return ; } else { if(rs < len && rs > 0) continue; else return ; } } ans = str; found = true; return ; } f(str+'R'); f(str+'B'); } int construct(int n, int r, vi a, vi b, vi x) { sz = n; req = r; A = a; B = b; X = x; string s(n, 'R'); bool all_one = true; bool all_two = true; for(int i = 0; i <r; i ++) { if(x[i] != 1) all_one = false; if(x[i] != 2) all_two = false; } if(all_one) { craft(s); return 1; } else if(all_two) { for(int i = 0; i <r; i ++) { if(a[i] == b[i] || n == 1) return 0; } for(int j = 1; j < n; j += 2) s[j] = 'B'; craft(s); return 1; } else { // BF f(""); if(found) { craft(ans); return 1; } else return 0; } return 0; } /* Identify problem diagram: Brute force, Greedy, Dynamic Programming, Divide and Conquer Reformulate the problem into something more theoretical !!!!! IMPLICIT GRAPH ?????? !!!!! PAY ATTENTION TO THE CONSTRAINTS: DP nD ? BF ? BITMASKING ? !!!!! SOLVE THE SUBTASKS FIRST: IT'S TOTALLY OK NOT TO SOLVE THE PROBLEM ENTIRELY Search for multiple approaches: select the seemingly optimal one Remember that you're the king of CP Change your approach Imagine Corner cases before submitting Don't spend too much time on the problem: move on ! */

Compilation message (stderr)

gift.cpp:28:1: warning: multi-line comment [-Wcomment]
   28 | ////////////******SOLUTION******\\\\\\\\\\\
      | ^
gift.cpp: In function 'void f(std::string)':
gift.cpp:39:21: warning: comparison of integer expressions of different signedness: 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   39 |     if(str.length() == sz)
      |        ~~~~~~~~~~~~~^~~~~
#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...