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 };
posted @ 2012-08-23 20:47  發_  阅读(127)  评论(0编辑  收藏  举报