• 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好用多了。。。



  • 相关阅读:
    各大公司 Java 后端开发面试题总结
    java程序开发工具集的使用
    删数
    能量项链//区间DP
    合并傻子//区间dp
    P1005 采药
    表达式计算系列
    进制转换
    最长公共子序列
    乘法游戏
  • 原文地址:https://www.cnblogs.com/vongang/p/2385350.html
Copyright © 2020-2023  润新知