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

  • 相关阅读:
    AI---ListPicker的使用
    AI---Screen & Notifier
    Android---开发环境
    Android---App Inventor环境搭建
    OS---host文件
    JAVA---接口与抽象类
    JAVA---类成员的访问权限
    JSP---一个Servlet处理多个请求操作
    hdu 6016
    hdu 6019
  • 原文地址:https://www.cnblogs.com/tiny656/p/2852458.html
Copyright © 2011-2022 走看看