ACdream群(167655270)原创群赛(4)

由于今晚有点事所以回来都9点多了,看了下题目A了两个水题就不在做下去了

Problem A: Convex

意思就是:

平面上有n个点,每个点到原点的距离是固定的,现在按顺序给出前一个点到后一个点的与原点行成的角度,保证所有角度的和为360度,现在把这些点按顺序连接起来,形成一个多边行,求这个多边行的面积。

画下图就知道是个水题,不过蛋疼了一会。。 sin函数传的参数是弧度,以为是角度,一直没得到想要的结果。。。

角度转弧度: 弧度 = 角度 * PI / 180

解法:把图形分解成n个三角形,求这n个三角形的面积和就行了。  因为知道两边长度加夹角大小,所以直接用三角形公式求面积。。。

View Code
 1 #include <stdio.h>
 2 #include <math.h>
 3 #define PI 3.141592653
 4 int main(void)
 5 {
 6     int n;
 7     double r;
 8     while(scanf("%d%lf",&n,&r)!=EOF)
 9     {
10           double ans = 0.0;
11           int a;
12           r = r * r / 2;
13           for(int i = 1; i <= n; i++)
14           {
15                   scanf("%d",&a);
16                   ans += r * sin(a * PI / 180);
17           }
18           printf("%.3lf\n",ans);
19     }
20     return 0;    
21 }

Problem E: The Game about KILL

题目意思:

就是以老师HU和他的学生排成一个圈,然后从1开始报数,报到2的出列,然后下一位又从1开始报数,知道剩下一个人停止,输出这个人的编号。

明显的约瑟夫环问题,这里K是特地的2,由于数据比较大,所以想到应该有规律的

通过约瑟夫环解公式,打印出前100项,立马看出规律来了,下面是约瑟夫环O(n)算法的解法,省去模拟。。

 for (i = 2; i <= n; i++)
{
       s = (s + k) % i;
 }

规律便是:

每逢2的i次幂那个数开始就重新重1开始,接下来的数就是前面的数加上2,即2为1,3就是3了,然后4是2的2次幂,所以4又重新开始为1,则5为3,6为5,7为7,8就是1了,规律就是这样了,接下来代码就简单了

View Code
 1 //Accepted    904    10    C/Edit    468 B
 2 #include <stdio.h>  
 3 int n;   
 4 int main()  
 5 {  
 6     int f[31];
 7     f[0] = 1;
 8     for(int i = 1; i < 31; i++)
 9             f[i] = f[i - 1] * 2;
10     while(scanf("%d", &n)!=EOF)  
11     {  
12        int i;
13        for( i = 0 ;i <= 31; i++)
14        {
15              if(f[i] > n) 
16                      break;
17        }
18        int d = n - f[i - 1];
19        printf("%d\n",1 + 2 * d);
20     }  
21     return 0;  
22 }    

其他题没去看。。。有时间再去看下,就写到这了

 

 

 

转载于:https://www.cnblogs.com/asen32/archive/2012/11/30/2796898.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值