2020.04.06 UCF Local Programming Contest 2017

E题:Opposites Attract

题目链接:https://nanti.jisuanke.com/t/44821

题目大意:

题目明确了圆盘上各块的得分,给出m(t)个点,问这些点在圆盘上的分数总和。

思路:

一个2π的圆,可以想到用弧度来确定点的位置(一开始做的时候用的角度,却WA了),弧度就是atan(x,y)  如果再除以 π,就可以简化,注意单独讨论点在y轴的情况。

解题代码:

 1 #include <cstdio>
 2 #include <iostream>
 3 #include <algorithm>
 4 #include <cmath>
 5 #include <string>
 6 #include <cstring>
 7 #include <map>
 8 using namespace std;
 9 typedef long long ll;
10 const double PI=3.1415926;
11 map <char,int> ma;
12 int main()
13 {
14    ll t;
15    cin >> t;
16    while(t--)
17    {
18        ll n,m,sum = 0;
19        double r1,r2,r3;
20        cin >> n >> r1 >> r2 >> r3 >> m;
21        for(int i = 0;i < m;i++)
22        {
23            double x,y,l,o;
24            cin >> x >> y;
25            l = hypot(x,y);
26            if(l > r3)
27               continue;
28            else if(l < r1)
29               sum += 50;
30            else
31            {
32                if(x == 0)
33                {
34                    if(y > 0)
35                      o = 0.5;
36                    else
37                      o = 1.5;
38                }
39                else
40                {
41                    o = atan(y/x) / PI;
42                    if(x > 0 && y < 0)
43                        o = 2.0 + o;
44                    else if(x < 0 && y < 0)
45                        o = 1.0 + o;
46                    else if(x < 0 && y > 0)
47                        o = 1.0 + o;
48                    double num = 1, one = 2.0/n;
49                    while(o - one > 0)
50                    {
51                        num ++;
52                        one += 2.0/n;
53                    }
54                    if(l < r2)
55                       sum += num*2;
56                    else
57                       sum += num;
58                }
59            }
60
61        }
62        cout << sum << endl;
63
64    }
65 }

原文地址:https://www.cnblogs.com/emhhbw/p/12655333.html

时间: 2024-11-02 07:35:58

2020.04.06 UCF Local Programming Contest 2017的相关文章

UCF Local Programming Contest 2017(2020-04-06)

原题地址:https://www.jisuanke.com/contest/7195?view=challenges A. Electric Bill 题意:分级收费,用电1000以下一档,以上一档,问应支付多少钱 AC代码: #include<iostream> #include<cstring> #include<algorithm> using namespace std; int main(){ int a,b,n,temp; cin>>a>&

2020.3.28 UCF Local Programming Contest 2016补题与解题报告

A.Majestic 10 大致题意就是指看有几个大于等于10,直接按照题意输出就行,签到题 代码: #include<stdio.h> int main(){ int n,a,b,c; scanf("%d",&n); while(n--){ scanf("%d %d %d",&a,&b,&c); int sum=0; printf("%d %d %d\n",a,b,c); if(a>=10) s

2020.3.28-ICPC训练联盟周赛,选用试题:UCF Local Programming Contest 2016

A.Majestic 10 签到题. #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<bitset> #include<cassert> #include<cctype> #include<cmath> #include<cstdlib> #include<ctime>

UCF Local Programming Contest 2012(Practice)补题

Clean Up the Powers that Be 主要是输出格式上的问题 1 #include <iostream> 2 #include <cstring> 3 using namespace std; 4 int main(){ 5 long long t,s[10005]; 6 cin>>t; 7 int p=0; 8 while(t--){ 9 p++; 10 memset(s,0,sizeof(s)); 11 int n; 12 cin>>n

A . Find the Twins -UCF Local Programming Contest 2015

https://nanti.jisuanke.com/t/43386 水题 zack和mack有对应的球员数字 从序列中找出是否存在 代码 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<bitset> #include<cassert> #include<cctype> #include<cmath

B . Medal Ranking -UCF Local Programming Contest 2015

https://nanti.jisuanke.com/t/43387 题意 奥运会,分别给出RU和US两国的 金牌 银牌 铜牌 数目 优先度 金牌>银牌>铜牌,其中一种相同则比较下一种,多的一方在color上获胜 总的奖牌数多的一方在count上获胜 判断US能在哪种方式上获胜 水题 代码 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #incl

C . Brownies vs. Candies vs. Cookies -UCF Local Programming Contest 2015

https://nanti.jisuanke.com/t/43388 题意 一共有 m 个队伍(无用数据), n 块蛋糕,对蛋糕进行 t 次操作 每次操作:给定当前队伍的人数 num ,对当前蛋糕数量 n 进行需求: 如果 n>num,num-=n: 否则,把所有的蛋糕切成两半(即n*=2)之后,再次进行需求: 问最终留下的蛋糕快数 简单模拟 代码 #include<iostream> #include<cstdio> #include<cstring> #inc

UCF Local Programming Contest 2018 E题(树状数组+dfs序)

如果这道题没有一个限制,那么就是一道树状数组+dfs序的裸题 第一个请求或许会带来困惑,导致想要动态建树,如果真的动态修改树,那么dfs序必定会改变,很难维护,并且数据很大,暴力应该会T 所以不妨先把全部的节点建好,这样只需要求一次dfs序,而对于第一种操作 我们只需要再那个位置减去在他之前的dfs序的bouns求和,并在这个的后一个位置+回来,这样就有这个点被修改,并且成为了一个新点,等同于要求的操作 #include<iostream> #include<cstdio> #in

UCF Local Programming Contest 2016正式赛

一.解题 1.Majestic 10 题意:几个大于十的,最水的,感觉 AC代码: #include<iostream>#define N 10using namespace std;int main(){ int n,i,a[N]; cin>>n; while(n--){ int count=0; for(i=1;i<=3;i++){ cin>>a[i]; if(a[i]>=10)count++; } for(i=1;i<3;i++){ cout&l