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

原文地址:https://www.cnblogs.com/tiny656/p/2852458.html