SRM 552 DIV2

比较悲催,第二道题没调出来,被long long的乘法越界坑了。

第一道题比较水一些,求四个矩阵中的F数目

 1 #include <iostream>
 2 #include <string>
 3 #include <vector>
 4 #include <cstdlib>
 5 #include <cmath>
 6 #include <map>
 7 #include <algorithm>
 8 #include <list>
 9 #include <ctime>
10 #include <set>
11 #include <queue>
12 using namespace std;
13 
14 
15 class FoxAndFlowerShopDivTwo{
16 public:
17     int theMaxFlowers(vector <string> flowers, int r, int c){
18         int res=0;
19         int row_n=flowers.size();
20         int col_n=flowers[0].size();
21         int counter;
22         counter=0;
23         for (int i = 0; i < r; i++)
24             for (int j = 0; j < col_n; j++) {
25                 if (flowers[i][j] == 'F')
26                     counter++;
27                 res = max(res, counter);
28             }
29         counter = 0;
30         for (int i = 0; i < row_n; i++)
31             for (int j = 0; j < c; j++) {
32                 if (flowers[i][j] == 'F')
33                     counter++;
34                 res = max(res, counter);
35             }
36         counter = 0;
37         for (int i = r+1; i < row_n; i++)
38             for (int j = 0; j < col_n; j++) {
39                 if (flowers[i][j] == 'F')
40                     counter++;
41                 res = max(res, counter);
42             }
43         counter = 0;
44         for (int i = 0; i < row_n; i++)
45             for (int j = c+1; j < col_n; j++) {
46                 if (flowers[i][j] == 'F')
47                     counter++;
48                 res = max(res, counter);
49             }
50         return res;
51     }
52 };

第二个,二分搜索

 1 #include <iostream>
 2 #include <string>
 3 #include <vector>
 4 #include <cstdlib>
 5 #include <cmath>
 6 #include <map>
 7 #include <algorithm>
 8 #include <list>
 9 #include <ctime>
10 #include <set>
11 #include <queue>
12 using namespace std;
13 typedef long long ll;
14 class FoxPaintingBalls{
15 public:
16     bool valid (vector<ll> array,ll average, ll num){
17         ll sum=0;
18         for(ll i=0;i<3;i++){
19             array[i]=array[i]-average*num;//就是被这个坑了
20             if(array[i]<0)
21                 return false;
22             sum=sum+array[i];
23         }
24         if(num>sum)
25             return false;
26         return true;
27     }
28 
29     long long theMax(long long R, long long G, long long B, int N){
30         if(1==N)
31             return R+G+B;
32         ll myn=(ll) N;
33         ll total=(myn+1)*myn;
34         int judge=N%3;
35         ll big,small;
36         total=total/2;
37         ll res=0;
38         if(1==judge){
39             big=total/3+1;
40             small=total/3;
41         }else{
42             big=small=total/3;
43         }
44 
45         vector<ll> array;
46         array.push_back(R);
47         array.push_back(G);
48         array.push_back(B);
49         if(1==judge){
50             ll left=0;
51             ll right=3000000000000000001LL;
52             ll mid;
53             while(left<right){
54                 mid=left+(right-left)/2;
55                 if(valid(array,small,mid)){
56                     left=mid+1;
57                 }else{
58                     right=mid;
59                 }
60             }
61             res=left-1;
62 
63         }else{
64             res=min(R/big,min(G/big,B/big));
65         }
66         return res;
67 
68 
69     }
70 };

第三道题应该算是总结规律的题,这尼玛太蛋疼了

这哥们写的比较清楚http://blog.csdn.net/acm_cxlove/article/details/7877067

原文地址:https://www.cnblogs.com/kakamilan/p/2644184.html