…
水题
强行用一下
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;
}