CodeForces820B【set.lower_bound】

来源:互联网 发布:windows server iscsi 编辑:程序博客网 时间:2024/06/14 00:26


水题
强行用一下

iterator set::lower_bound(val): 返回第一个关键字的值是大于等于给定值的定位器。

细节处理越界: end()

题意:
n变形,求三个点组成角,最接近角的三点。
思路:

正n边形每个内角的度数公式: (n-2)*180/n
正n边形最小角的度数公式:(n-2)*180/n/(1+n-3)=180/n

当n>180时,有问题—>所以乘n处理。
贴一发挫代码:

#include <bits/stdc++.h>using namespace std;typedef long long LL;typedef pair<LL,LL>PII;set<int>s;set<int>::iterator cp;int main(){    int n,a;    scanf("%d%d",&n,&a);    int ed = (n-2)*180;    int st = 180;    a *= n;    int t1;    for(int i=1;;i++)    {        int tp = st*i;        if(tp <= ed && tp <= 360*n) s.insert(tp);        else break;    }    cp = s.lower_bound(a);    if(cp == s.end())        t1 = ed;    else        t1 = *cp;    if(cp != s.begin())    {        int t2 = t1 - st;        if(abs(t1-a) > abs(t2-a))            t1= t2;        printf("1 %d ",n);        int add = t1/st;        printf("%d\n",1+add);    }    else{        printf("1 %d ",n);        int add = t1/st;        printf("%d\n",1+add);    }    return 0;}