zoukankan      html  css  js  c++  java
  • Codeforces Round #159 (Div. 2)

    只看了前面三题,都很水。但是做的很不好。

    A.Sockets    题目确实挺晦涩的,但是勉强看着Sample就一下懂了,按照给的supply-line filter排个序,然后由大到小累积,看需要几个能满足所有Devices,如果不行就 -1 

    View Code
    #include <iostream>
    #include <cstdlib>
    #include <cstdio>
    #include <cstring>
    #include <string>
    #include <algorithm>
    #include <cmath>
    #include <vector>
    #include <map>
    #include <list>
    #include <deque>
    #include <queue>
    #include <functional>
    #include <bitset>
    #include <set>
    using namespace std;
    
    
    int e[55];
    
    int main()
    {
        int n,m,k,i;
        cin >> n >> m >> k;
        for(i = 0; i < n; i++)
            cin >> e[i];
        sort(e, e+n);
        int ok = 0;
        int ans = 0;
        int cur = k;
        if(cur >= m)    ok = 1;
        for(i = n-1; i >= 0 && !ok; i--)
        {
            cur = cur-1 + e[i];
            ans++;
            if(cur >= m)
            {
                ok = 1;
                break;
            }
        }   
        if(ok)  cout << ans << endl;
        else    cout << "-1" << endl;
        return 0;
    }

    B.Playing Cubes  Petya第一个方块放的颜色决定方块的排列。可以模拟放方块的过程来得到结果。答案为 max(red, blue)-1, min(red, blue)

    C.View Angle   

    从原点(0,0)出发的的n条射线,求最小角度包含所有射线。

    可以用atan2()函数。

    对于任意不同时等于0的实参数x和y,atan2(y,x)所表达的意思是坐标原点为起点,指向(x,y)的射线在坐标平面上与x轴正方向之间的角的角度度。当y>0时,射线与x轴正方向的所得的角的角度指的是x轴正方向绕逆时针方向到达射线旋转的角的角度;而当y<0时,射线与x轴正方向所得的角的角度指的是x轴正方向绕顺时针方向达到射线旋转的角的角度。

    当弧度值小于0时候,加上2*M_PI,修正成从0开始。

    将这些射线按照弧度值升序,然后依次枚举相邻两个射线的角度,别忘了处理首尾两个射线,最后用360.0 - 枚举出最大的相邻射线弧度,乘以180.0/M_PI,就是答案。

    View Code
    #define _CRT_SECURE_NO_WARNINGS
    #define _USE_MATH_DEFINES
    
    #include <iostream>
    #include <cstdlib>
    #include <cstdio>
    #include <cstring>
    #include <string>
    #include <algorithm>
    #include <cmath>
    #include <cassert>
    #include <vector>
    #include <map>
    #include <list>
    #include <deque>
    #include <queue>
    #include <functional>
    #include <bitset>
    #include <set>
    using namespace std;
    
    
    vector<double> e;
    
    int main()
    {
        int n,i;
        double x,y;
        cin >> n;
        for(i = 0; i < n; i++)
        {
            scanf("%lf %lf", &x,&y);
            double tmp = atan2(y,x);
            if(tmp < 0)
                e.push_back(2*M_PI+tmp);
            else
                e.push_back(tmp);
        }
        sort(e.begin(), e.end());
        double dif = 0.0;
        for(i = 1; i < e.size(); i++)
            dif = max(dif, e[i]-e[i-1]);
        dif = max(dif, 2*M_PI - (e[n-1]-e[0]));
    
        printf("%.10lf\n", 360.0 - dif*180.0/M_PI);
        return 0;
    }

    D.Sum 

    自己YY了,结果过了。因为满足ai ≤ ai+1 ≤ 2ai-1 ,所以有个想法,设定一个变量mend = 0作为修正变量,从尾到头不断根据mend变量来调整取正还是取负。

    但是遇到3 3 5这种,从尾到头mend最后为-1,那么就把正负号颠倒过来好了。看到Tag有DP,不知道该怎么想,求各位大牛指导。

    View Code
    #define _CRT_SECURE_NO_WARNINGS
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #include <iostream>
    #include <sstream>
    #include <iomanip>
    #include <vector>
    #include <deque>
    #include <list>
    #include <set>
    #include <map>
    #include <stack>
    #include <queue>
    #include <bitset>
    #include <string>
    #include <numeric>
    #include <functional>
    #include <iterator>
    #include <typeinfo>
    #include <utility>
    #include <memory>
    #include <cmath>
    #include <cstdlib>
    #include <cctype>
    #include <cstddef>
    #include <complex>
    #include <ctime>
    #include <cassert>
    using namespace std;
    static inline bool get(int &v)
    {
        int s = 1, c;
        while(!isdigit(c = getchar())&&c != '-')
        {
            if(c == EOF)
                break ;
        }
        if(c == EOF) return 0;
        if(c == '-') s = 0 , v = 0;
        else v = c^48;
        for(;isdigit(c = getchar());v = (v << 1) + (v << 3) + (c ^ 48));
        v = (s ? v : -v);
        return 1 ;
    }
    
    
    vector<int> e;
    char ans[100005];
    int main()
    {
        int n,i,tmp;
        get(n);
        for(i = 0;i < n; i++)
        {
            get(tmp); e.push_back(tmp);
        }
        int mend = 0;
        for(i = n-1; i >= 0; i--)
        {
            if(mend > 0)    
            {
                mend -= e[i];
                ans[i] = '-';
            }
            else    
            {
                mend += e[i];
                ans[i] = '+';
            }
        }
        if(mend < 0)
        {
            for(i = 0; i < n; i++)
            {
                if(ans[i] == '+')    printf("-");
                else    printf("+");
            }
        }
        else
        {
            for(i = 0; i < n; i++)
            {
                printf("%c", ans[i]);
            }
        }
        printf("\n");
    
        return 0;
    }

    E.Greedy Elevator

  • 相关阅读:
    Aurora 数据库支持多达五个跨区域只读副本
    Amazon RDS 的 Oracle 只读副本
    Amazon EC2 密钥对
    DynamoDB 读取请求单位和写入请求单位
    使用 EBS 优化的实例或 10 Gb 网络实例
    启动 LAMP 堆栈 Web 应用程序
    AWS 中的错误重试和指数退避 Error Retries and Exponential Backoff in AWS
    使用 Amazon S3 阻止公有访问
    路由表 Router Table
    使用MySQLAdmin工具查看QPS
  • 原文地址:https://www.cnblogs.com/tiny656/p/2852458.html
Copyright © 2011-2022 走看看