比较悲催,第二道题没调出来,被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/archive/2012/08/17/2644184.html