From f1558bb8d312178b341b267376e5bbb996c3cfdc Mon Sep 17 00:00:00 2001 From: Santo Cariotti Date: Tue, 2 May 2017 09:19:13 +0200 Subject: Deleted Facebook Hacker Cup files --- broken_bits.cpp | 167 -------------------------------------------------------- 1 file changed, 167 deletions(-) delete mode 100644 broken_bits.cpp (limited to 'broken_bits.cpp') diff --git a/broken_bits.cpp b/broken_bits.cpp deleted file mode 100644 index de08d4d..0000000 --- a/broken_bits.cpp +++ /dev/null @@ -1,167 +0,0 @@ -// Hacker Cup 2017 -// Round 3 -// Broken Bits -// Jacob Plachta - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -using namespace std; - -#define LL long long -#define LD long double -#define PR pair - -#define Fox(i,n) for (i=0; i=0; i--) -#define FoxR1(i,n) for (i=n; i>0; i--) -#define FoxRI(i,a,b) for (i=b; i>=a; i--) -#define Foxen(i,s) for (i=s.begin(); i!=s.end(); i++) -#define Min(a,b) a=min(a,b) -#define Max(a,b) a=max(a,b) -#define Sz(s) int((s).size()) -#define All(s) (s).begin(),(s).end() -#define Fill(s,v) memset(s,v,sizeof(s)) -#define pb push_back -#define mp make_pair -#define x first -#define y second - -template T Abs(T x) { return(x<0 ? -x : x); } -template T Sqr(T x) { return(x*x); } - -const int INF = (int)1e9; -const LD EPS = 1e-9; -const LD PI = acos(-1.0); - -bool Read(int &x) -{ - char c,r=0,n=0; - x=0; - for(;;) - { - c=getchar(); - if ((c<0) && (!r)) - return(0); - if ((c=='-') && (!r)) - n=1; - else - if ((c>='0') && (c<='9')) - x=x*10+c-'0',r=1; - else - if (r) - break; - } - if (n) - x=-x; - return(1); -} - -int main() -{ - // vars - int T,t; - int N,K; - int i,a,b,ones,origOnes,forceZero; - bool allOnes; - LL v1,v2,ans; - int origL[60],L[60]; - // testcase loop - Read(T); - Fox1(t,T) - { - // input - Read(N),Read(K); - ones=0; - Fox(i,N) - Read(L[i]),ones+=L[i]; - origOnes=ones=K-ones; - memcpy(origL,L,sizeof(L)); - // all unknowns must be 0 or 1? - if ((!ones) || (N==K)) - { - ans=0; - goto Done; - } - // 2 leading 0s (can never differentiate them)? - if (L[0]+L[1]==0) - { - ans=-1; - goto Done; - } - // try all possible key 0 sequences - ans=0; - Fox1(a,N-1) - if ((!origL[a]) && (origL[a-1])) - Fox(forceZero,2) - { - // find end of key 0 sequence - memcpy(L,origL,sizeof(L)); - ones=origOnes; - FoxI(i,a,N-1) - if (L[i]) - break; - b=i-1; - // allocate as many 1s on the left of the key sequence as possible - // (but leaving at least 1, and optionally forcing one of them to be 0) - allOnes=1; - Fox(i,a) - if (!L[i]) - if ((ones>1) && ((!allOnes) || (!forceZero))) - L[i]=1,ones--; - else - allOnes=0; - // allocate as many 1s as close to the end as possible (but leaving at least 1) - FoxRI(i,b+1,N-1) - if ((!L[i]) && (ones>1)) - L[i]=1,ones--; - // in key sequence, use smallest possible allocation - if (!ones) - continue; - FoxRI(i,a,b) - if (ones) - L[i]=1,ones--; - if (ones) - continue; - // if left of key sequence is all 1s, use 2nd-smallest allocation instead - if (allOnes) - if (!next_permutation(L+a,L+b+1)) - continue; - v1=0; - Fox(i,N) - v1=v1*2+L[i]; - // state will be known once key sequence wraps around - FoxI(i,a,N-1) - L[i]=1; - v2=0; - Fox(i,N) - v2=v2*2+L[i]; - Max(ans,v2-v1+1); - } - // output -Done:; - printf("Case #%d: %lld\n",t,ans); - } - return(0); -} \ No newline at end of file -- cgit v1.2.3-18-g5258