BAPC 2014 Preliminary ACM-ICPC Asia Training League 暑假第一阶段第一场 A. Choosing Ice Cream-gcd B. Failing Components-最短路Dijkstra F. Runway Planning

开始水一波博客

题目链接:

A. Choosing Ice Cream

传送门

题意就是n个冰淇淋,骰子有k个面,问你是否能在公平的概率下转几次骰子能确定买哪个冰淇淋。

举个例子,假设我只有一个冰淇淋,我不用转骰子直接就会买这个,所以转骰子的次数是0,如果我有4个冰淇淋,2个骰子面,我可以先把冰淇淋abcd分成两部分,ab一组,cd一组,这是等概率的,我先转一次骰子确定是选ab组还是cd组,然后再转一次就可以确定买哪个了。如果我有6个冰淇淋,12个面,我可以每一种冰淇淋贴2个面,转一次就可以确定了。个人理解是这种意思。

这个题读题猜题意猜了好久(捂脸==),题意猜对之后还是没过,最后发现是gcd是变化的,所以每循环一次就要重新算一遍gcd,1的情况特判一下就可以了。

代码:

 1 #include<iostream>
 2 #include<algorithm>
 3 #include<cstring>
 4 #include<iomanip>
 5 #include<stdio.h>
 6 #include<math.h>
 7 #include<cstdlib>
 8 #include<set>
 9 #include<map>
10 #include<ctime>
11 #include<stack>
12 #include<queue>
13 #include<vector>
14 #include<set>
15 #define ll long long int
16 #define INF 0x7fffffff
17 #define LIT 0x3f3f3f3f
18 #define mod 1000000007
19 #define me(a,b) memset(a,b,sizeof(a))
20 #define PI acos(-1.0)
21 #define ios ios::sync_with_stdio(0),cin.tie(0);
22 using namespace std;
23 const int maxn=1e5+5;
24 int main(){
25     int t,n,k;
26     scanf("%d",&t);
27     while(t--){
28         scanf("%d%d",&n,&k);
29         if(n==1){
30             printf("0\n");
31             continue;
32         }
33         int c=__gcd(n,k);
34         if(c==1){
35             printf("unbounded\n");
36             continue;
37         }
38         int ans=0;
39         while(c!=1){
40             n/=c;
41             c=__gcd(n,k);
42             ans++;
43         }
44         if(n==1)
45             printf("%d\n",ans);
46         else
47             printf("unbounded\n");
48     }
49 }

B. Failing Components

传送门

题意就是单向图,从起点开始找最短路,然后统计一下个数就可以。方向是从b到a,权值为s。

直接最短路跑迪杰斯特拉,一开始用数组版的没过,换了一个队列版的过了。

代码:

 1 //B
 2 #include<iostream>
 3 #include<cstdio>
 4 #include<cstring>
 5 #include<cmath>
 6 #include<cstdlib>
 7 #include<queue>
 8 #include<cstring>
 9 #include<algorithm>
10 using namespace std;
11 typedef long long ll;
12 const int maxn=1e5+10;
13 const double eps=1e-7;
14 const int N=1e5+10;
15 const int INF=0x3f3f3f3f;
16 int head[N*2], nex[N*2], to[N*2], val[N*2], dis[N], vis[N], tot;
17 struct cmp{
18     bool operator()(int a,int b) {
19         return dis[a]>dis[b];
20     }
21 };
22 priority_queue<int, vector<int>, cmp > Q;
23 void init() {
24     tot = 0;
25     while(!Q.empty()) Q.pop();
26     memset(head, -1, sizeof(head));
27     memset(dis, INF, sizeof(dis));
28     memset(vis, 0, sizeof(vis));
29 }
30 void addedge(int u, int v, int w) {
31     to[tot] = v;
32     nex[tot] = head[u];
33     val[tot] = w;
34     head[u] = tot++;
35 }
36 void Dijkstra(int S) {
37     Q.push(S);
38     dis[S] = 0;
39     while(!Q.empty()) {
40         int u = Q.top();
41         Q.pop();
42         for(int i=head[u]; i!=-1; i=nex[i]) {
43             int v = to[i];
44             if(!vis[v] && dis[u]+val[i] < dis[v]) {
45                 dis[v] = dis[u]+val[i];
46                 Q.push(v);
47             }
48         }
49     }
50 }
51 int main(){
52     int t;
53     scanf("%d",&t);
54     while(t--){
55         init();
56         int n,p,k;
57         scanf("%d%d%d",&n,&p,&k);
58         int h,l,val;
59         for(int i=0;i<p;i++){
60             scanf("%d%d%d",&h,&l,&val);
61             addedge(l,h,val);
62         }
63         Dijkstra(k);
64         int num=0;
65         int maxx=-1;
66         for(int i=1;i<=n;i++)
67         {
68             if(dis[i]!=INF)
69             {num++;maxx=max(maxx,dis[i]);}
70         }
71         cout<<num<<" "<<maxx;
72         cout<<endl;
73     }
74     return 0;
75 }

F. Runway Planning

传送门

题意简直就是有毒,中间bb一堆都是没用的,主要的意思就是度数大于180度的就先减去180度,然后除以10,四舍五入的值就是答案。如果最后结果是0就输出18就可以,其他没了,看懂题意就是水题。

代码:

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<cmath>
 5 #include<algorithm>
 6 #include<cstdlib>
 7 using namespace std;
 8 typedef long long ll;
 9 const int maxn=1e5+10;
10 int main(){
11     int t;
12     scanf("%d",&t);
13     while(t--){
14         int n,ans;
15         scanf("%d",&n);
16         if(n>=180)n-=180;
17         int cnt=n%10;
18         if(cnt>=5)ans=n/10+1;
19         else ans=n/10;
20         if(ans==0){
21             if(cnt>=5)ans=1;
22             else ans=18;
23         }
24         printf("%02d\n",ans);
25     }
26 }

其他题并不想补题,因为不想看题目猜题意,去看别的东西了。

吐槽一下,这场比赛全是阅读理解题,我看不懂题意,以后要训练一下读题能力,英语等级考试水平和能不能读懂题一毛钱关系都没有。

Debug能力也要训练一下,因为自己Debug能力实在是差到变形。

受不了,为什么我队友还不理我,简直要哭死了(我错了,我错了,小声bb。。。)

原文地址:https://www.cnblogs.com/ZERO-/p/9279800.html

时间: 2024-11-09 18:35:37

BAPC 2014 Preliminary ACM-ICPC Asia Training League 暑假第一阶段第一场 A. Choosing Ice Cream-gcd B. Failing Components-最短路Dijkstra F. Runway Planning的相关文章

ACM-ICPC Asia Training League 暑假第一阶段第一场 ABF

A Choosing Ice Cream You are standing in the supermarket in front of the freezers. You have a very tough task ahead of you: you have to choose what type of ice cream you want for after dinner that evening. After a while, you give up: they are all awe

Benelux Algorithm Programming Contest 2014 Final ACM-ICPC Asia Training League 暑假第一阶段第二场 E. Excellent Engineers-单点更新、区间最值-线段树 G. Growling Gears I. Interesting Integers-类似斐波那契数列-递推思维题

先写这几道题,比赛的时候有事就只签了个到. E. Excellent Engineers 传送门: 这个题的意思就是如果一个人的r1,r2,r3中的某一个比已存在的人中的小,就把这个人添加到名单中. 因为是3个变量,所以按其中一个变量进行sort排序,然后,剩下的两个变量,一个当位置pos,一个当值val,通过线段树的单点更新和区间最值操作,就可以把名单确定. 代码: 1 //E-线段树 2 #include<iostream> 3 #include<cstdio> 4 #incl

2014 ACM/ICPC Asia Regional Guangzhou Online Wang Xifeng&#39;s Little Plot HDU5024

一道好枚举+模拟题目.转换思维视角 这道题是我做的,规模不大N<=100,以为正常DFS搜索,于是傻乎乎的写了起来.各种条件限制模拟过程 但仔细一分析发现对每个点进行全部八个方向的遍历100X100X100^8 .100X100个点,每个点在走的时候8中选择,TLE 于是改为另一个角度: 以符合要求的点为拐弯点,朝两个垂直的方向走,求出最远的距离.这样只要对每个点各个方向的长度知道,组合一下对应的就OK. 避免了每个点深搜. PS:搜索的时候x,y写反了,导致构图出现问题,以后用[dy][dx]

HDU 5014 Number Sequence(2014 ACM/ICPC Asia Regional Xi&#39;an Online) 题解

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5014 Number Sequence Problem Description There is a special number sequence which has n+1 integers. For each number in sequence, we have two rules: ● ai ∈ [0,n] ● ai ≠ aj( i ≠ j ) For sequence a and sequ

hdu 5008(2014 ACM/ICPC Asia Regional Xi&#39;an Online ) Boring String Problem(后缀数组&amp;二分)

Boring String Problem Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 219    Accepted Submission(s): 45 Problem Description In this problem, you are given a string s and q queries. For each que

poj 5024&amp;&amp;&amp;2014 ACM/ICPC Asia Regional Guangzhou Online 1003(预处理)

http://acm.hdu.edu.cn/showproblem.php?pid=5024 分析:预处理每个点在八个方向的射线长度,再枚举八种L形状的路,取最大值. 注意题意是求一条最长路,要么一条直线,要么只有一个90角,即L型.其实直线就是L形的一个方向长度为0. 代码: #include<iostream> #include<map> #include<cstdio> #include<string> #include<cstring>

2014 ACM/ICPC Asia Regional Xi&#39;an Online

03 hdu5009 状态转移方程很好想,dp[i] = min(dp[j]+o[j~i]^2,dp[i]) ,o[j~i]表示从j到i颜色的种数. 普通的O(n*n)是会超时的,可以想到o[]最大为sqrt(n),问题是怎么快速找到从i开始往前2种颜色.三种.四种...o[]种的位置. 离散化之后,可以边走边记录某个数最后一个出现的位置,初始为-1,而所要求的位置就等于 if(last[a[i]]==-1) 该数没有出现过,num[i][1] = i,num[i][j+1] = num[i-1

HDU 5000 2014 ACM/ICPC Asia Regional Anshan Online DP

Clone Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/65536K (Java/Other) Total Submission(s) : 8   Accepted Submission(s) : 5 Font: Times New Roman | Verdana | Georgia Font Size: ← → Problem Description After eating food from Chernobyl,

2014 ACM/ICPC Asia Regional Xi&#39;an Online(HDU 5007 ~ HDU 5017)

题目链接 A题:(字符串查找,水题) 题意 :输入字符串,如果字符串中包含“ Apple”, “iPhone”, “iPod”, “iPad” 就输出 “MAI MAI MAI!”,如果出现 “Sony” 就输出“SONY DAFA IS GOOD!” ,大小写敏感. 思路 : 字符串查找,水题. 1 #include <string.h> 2 #include <stdio.h> 3 #include <iostream> 4 5 using namespace st