SRM 553 DIV2
250.
解三元一次方程组。
View Code
1 class PlatypusDuckAndBeaver 2 { 3 public: 4 int minimumAnimals(int a, int b, int c) 5 { 6 int k = (2*b+4*c-a)/2; 7 int x = b - k; 8 int y = c - k; 9 return x + y + k; 10 } 11 };
500.
二分答案。
View Code
1 typedef long long LL; 2 class Suminator 3 { 4 public: 5 LL work(vector<int>f,int want) 6 { 7 stack<LL>S; 8 S.push(0); 9 for(int i=0;i<f.size();i++) 10 { 11 12 if(f[i] == 0) 13 { 14 LL tmp = 0; 15 for(int j =S.size(),k=0;j>0&&k<2;k++,j--){ 16 tmp += (LL)S.top(); 17 S.pop(); 18 } 19 S.push(tmp); 20 } 21 else S.push((LL)f[i]); 22 } 23 return S.top() - (LL)want; 24 } 25 int findMissing(vector <int> f, int want) 26 { 27 int n = f.size(); 28 int x=0; 29 for(int i=0;i<n;i++) 30 { 31 if(f[i] == -1) 32 { 33 x = i; 34 break; 35 } 36 } 37 f[x]=0; 38 if(work(f,want) == 0 )return 0; 39 int l = 1,r = 1000000000; 40 while(l<=r) 41 { 42 int m = (l + r)>>1; 43 f[x] = m; 44 LL tmp = work(f,want); 45 if(tmp == 0)return m; 46 else if(tmp > 0)r = m - 1; 47 else l = m + 1; 48 } 49 return -1; 50 } 51 };
by Farmer