SRM 536 div2

  昨晚正好赶上好时候,TC在8点到9点多有比赛。所以做了一下,发现没了IDE,我的编码习惯很有问题,最后调试1000pt时连括号都对不上号了。。。代码写的很乱,调试很费劲!这个坏毛病得改!折腾一晚上没做题,就给了20分,妹的!

250pt:x不是0就是1,并且给出的系数ai也是不是0就是1。所以直接扫一遍就行。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
#include <stack>
#include <vector>
#include <map>

using namespace std;


class BinaryPolynomialDivTwo {
public:
int countRoots(vector <int> a) {
int len = a.size();
int i, ans, cnt = 0;

if(a[0] == 0) cnt++;

for(ans = 0, i = 0; i < len; ++i) {
ans += a[i];
}
ans %= 2;
if(ans == 0) cnt++;
return cnt;
}
};

500pt:思路是把数据换成int型,然后用二维数组存起来,先按每一行从小到打排序,然后找没一列一遍最大的,求和。

ps:这题思路都没理清楚就开始写,中间改了好几次,检讨!检讨!

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
#include <stack>
#include <vector>
#include <map>

using namespace std;

class RollingDiceDivTwo {
public:
int minimumFaces(vector <string> rolls) {
int i, l1, j;
int l2 = 0, ans = 0;
int m[100][100],a[50], t;
l1 = rolls.size();
for(i = 0; i < l1; ++i) {
l2 = rolls[i].size();

for(j = 0; j < l2; ++j) {
t = rolls[i][j] - '0';
a[j] = t;
}
sort(a, a + l2);
for(j = 0; j < l2; ++j)
m[i][j] = a[j];
}
for(j = 0; j < l2; ++j) {
t = 0;
for(i = 0; i < l1; ++i) {
t = max(t, m[i][j]);
}
ans += t;
}
return ans;
}
};

1000pt:思路:先按从小到大排序,a[i]表示i之前的所有数的和。f[i]表示i之前的左右数所能得到的最大利润。

f[i] = max(f[i], (s[i] - s[j] + f[j])/(i - j + 1));

看了pass的人的思路写了一段代码。

#include <vector>
#include <list>
#include <map>
#include <set>
#include <queue>
#include <deque>
#include <stack>
#include <bitset>
#include <algorithm>
#include <functional>
#include <numeric>
#include <utility>
#include <sstream>
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <ctime>

using namespace std;


class MergersDivTwo {
public:
double a[100], b[100], f[100];
double findMaximum(vector <int> revenues, int k) {
sort(revenues.begin(), revenues.end());
int len = revenues.size();
int i, j;
for(i = 1; i <= len; ++i) {
b[i] = revenues[i-1];
a[i] = a[i-1] + b[i];
}

for(i = 1; i <= len; ++i) {
f[i] = -1e9;
if(i >= k) f[i] = a[i]/i;
for(j = i - k + 1; j >= 1; --j) {
f[i] = max(f[i], (a[i] - a[j] + f[j])/(i-j+1));
}
}
return f[len];
}
};


<%:testing-code%>
//Powered by KawigiEdit 2.1.8 (beta) modified by pivanof!

强烈建议用KawigiEdit这个插件,比Standard好用多了。。。



原文地址:https://www.cnblogs.com/vongang/p/2385350.html