【解题报告】2016 Multi-University Training Contest 3
来源:互联网 发布:win10 软件 卸载 残留 编辑:程序博客网 时间:2024/06/05 19:44
题目链接
A - Sqrt Bo(HDU 5752)
大意
定义
思路
当
代码
#include <bits/stdc++.h>using namespace std;typedef long long ll;const ll upperBound = 4294836224LL;ll a;string s;stringstream ss;int main() { while(cin >> s) { if(s.size() > 10) { puts("TAT"); continue; } ss.clear(); ss << s; ss >> a; if(a < 1 || a > upperBound) { puts("TAT"); continue; } bool ok = false; for(int i = 0; i <= 5; i++) { if(a == 1) { cout << i << endl; ok = true; break; } a = (ll)floor(sqrt(1.0 * a)); } if(ok == false) { puts("TAT"); } } return 0;}
B - Permutation Bo(HDU 5753)
大意
题给一个序列
思路
根据本题的数据规模来看,肯定无法枚举排列然后算期望了。一个可行的思维是算出序列
- 当考虑
c 的第1 个元素c1 时,我们只要考虑前两个元素的排列,当前两个元素呈现出c1>c2 时c1 的贡献就会被算进期望中。显然c1>c2 的概率是12 。 - 当考虑
c 的第2 个元素c2 时,我们只要考虑前三个元素的排列,当前三个排列呈现出c1<c2,c3<c2 时,c2 的贡献就回被算进期望中。显然这种排列的概率是13 。 - 第
3 到第n−1 个元素的贡献与第2 个元素的贡献相似。第n 个元素的贡献与第1 个元素的贡献相似。
于是我们枚举每个元素,将其贡献加入期望中即可。
代码
#include <bits/stdc++.h>using namespace std;int n, a;double ans;int main() { while(~scanf("%d", &n)) { ans = 0; for(int i = 1; i <= n; i++) { scanf("%d", &a); if(i == 1 || i == n) { ans += 1.0 * a / 2; } else { ans += 1.0 * a / 3; } } if(n == 1) { printf("%.5f\n", 1.0 * a); } else { printf("%.5f\n", ans); } } return 0;}
C - Life Winner Bo(HDU 5754)
大意
有两个人在国际象棋棋盘上用国际象棋一个棋子进行博弈,这个棋子可能是王,王后,城堡和骑士。棋子从坐标
思路
根据国际象棋棋盘的特点,该游戏可以抽象成从两个石子堆(分别有
- 王:由于王可以在一次移动中横向,纵向或斜向移动一步,因此对应到拿石子模型中,当两堆石子的数量
N−1,M−1 都是偶数的时候当前状态是必败态(否则一定可以通过一次行动使得当前两堆石子的数量变成偶数)。 - 城堡:由于城堡可以在一次移动中横向或者纵向移动任意步,因此对应到拿石子的模型中,与
NimGame 模型是一样的。因此只有N=M 的时候先手失败,其余情况下是先手获胜(先手总可以令对方面对两堆石子数目相同的情况,这种情况是必败态)。 - 骑士:由于骑士可以在一次移动中横移两步纵移一步或横移一步纵移两步,因此对应到拿石子模型中,相当于在
N−1,M−1 两堆石子中一堆拿一个,而另一堆拿两个。当N−1+M−1 不是3 的倍数的时候一定是平局。当它是3 的倍数的时候,当N=M 时一定是必败的,因为只要想脱离必败态(例如两堆石子分别−1,−2 )就一定会被赶回必败态(例如两堆石子分别−2,−1 )。若N,M 不等且它们的差值为1 时一定是必胜的,因为必定可以用一步把对手逼入必败态。 - 王后:由于王后可以在一次移动中横向,纵向或斜向移动任意步,因此对应到拿石子的模型中,与
WythoffGame 模型是一样的。因此可以用公式ai=⌊i×(1+5√)/2⌋,bi=ai+i 检验当前局势(N−1,M−1) 是否是必败局势。
代码
#include <bits/stdc++.h>using namespace std;const int maxn = 1000;char ch[] = {'G', 'D', 'B'};int t, type, n, m, ans, G[maxn+5][maxn+5];int king() { return n % 2 == 1 && m % 2 == 1 ? -1 : 1;}int castle() { return n == m ? -1 : 1;}int knight() { if(n > m) { swap(n, m); } if(n == m && (n - 4) % 3 == 0 && n >= 4) { return -1; } if(n % 3 == 2 && m % 3 == 0 && m - n == 1) { return 1; } return 0;}int queen() { if(n > m) { swap(n, m); } int a = n - 1, b = m - 1, k = m - n; double tmp = (1.0 + sqrt((double)5.0)) / 2.0; return (int)(k * tmp) == a ? -1 : 1;}int main() { scanf("%d", &t); while(t--) { scanf("%d%d%d", &type, &n, &m); if(type == 1) { ans = king(); } if(type == 2) { ans = castle(); } if(type == 3) { ans = knight(); } if(type == 4) { ans = queen(); } printf("%c\n", ch[ans+1]); } return 0;}
J - Rower Bo(HDU 5761)
大意
主人公要驾船从平面直角坐标系中的
思路
再思考无果的时候,不妨将问题转化一下:主人公从
设T为主人公要花的时间,另外主人公在
对竖直方向有
此时还有一个条件没有利用,那就是主人公的速度方向始终朝向终点,那么对主人公当前位置到目的地的方向有
最后联立这三个方程可得
于是原问题得解。
代码
#include <bits/stdc++.h>using namespace std;int a, v1, v2;int main() { while(~scanf("%d%d%d", &a, &v1, &v2)) { if(a == 0) { puts("0.00000"); } else if(v1 <= v2) { puts("Infinity"); } else { printf("%.5f\n", 1.0 * v1 * a / (v1 * v1 - v2 * v2)); } } return 0;}
K - Teacher Bo(HDU 5762)
大意
题给
思路
虽然看上去不同的二元组会很多,但是根据鸽巢原理,当
代码
#include <bits/stdc++.h>using namespace std;const int maxn = 1e5 + 10;bool ok;int t, n, m, dx, dy, mht, x[maxn], y[maxn], vis[maxn];int main() { scanf("%d", &t); while(t--) { scanf("%d%d", &n, &m); for(int i = 1; i <= n; i++) { scanf("%d%d", &x[i], &y[i]); } memset(vis, 0, sizeof(vis)); ok = false; for(int i = 1; i <= n; i++) { for(int j = i + 1; j <= n; j++) { dx = abs(x[i] - x[j]); dy = abs(y[i] - y[j]); mht = dx + dy; if(vis[mht] == true) { ok = true; i = n + 1; break; } vis[mht] = true; } } puts(ok ? "YES" : "NO"); } return 0;}
(其它题目略)
- 2016 Multi-University Training Contest 3----解题报告
- 2016 Multi-University Training Contest 3 解题报告
- 【解题报告】2016 Multi-University Training Contest 3
- 2014 Multi-University Training Contest 解题报告
- 2016 Multi-University Training Contest 1----解题报告
- 2016 Multi-University Training Contest 2----解题报告
- 2016 Multi-University Training Contest 4 解题报告
- 2016 Multi-University Training Contest 5 解题报告
- 2016 Multi-University Training Contest 6 解题报告
- 【解题报告】2016 Multi-University Training Contest 4
- 2015 Multi-University Training Contest 3 解题报告
- hdu5752 2016 Multi-University Training Contest 3 Sqrt Bo 解题报告
- hdu5753 2016 Multi-University Training Contest 3 Permutation Bo 解题报告
- hdu5754 2016 Multi-University Training Contest 3 Life Winner Bo 解题报告
- hdu5755 2016 Multi-University Training Contest 3 Gambler Bo 解题报告
- hdu5756 2016 Multi-University Training Contest 3 Boss Bo 解题报告
- hdu5758 2016 Multi-University Training Contest 3 Explorer Bo 解题报告
- hdu 5759 2016 Multi-University Training Contest 3 Gardener Bo 解题报告
- Qt的ComboBox的美化
- oracle的相关知识
- 解决 Redis on Windows Setup Wizard ended prematurely
- 数据持久化-plist文件的操作
- 没有自制力的人有什么资格谈努力
- 【解题报告】2016 Multi-University Training Contest 3
- mvn 编码GBK的不可映射字符
- Android中用代码设置ImageView的src和background
- 分布式系统事务一致性解决方案
- Win10+Qt5 Creator msvc版本+opencv249配置中发现的问题
- Eclipse 发布Web Project到Tomcat的三种方法
- Leetcode 104. Maximum Depth of Binary Tree 二叉树的最大高度 解题报告
- Altium Designer批量把一些元件从顶层换到底层
- 基于HOG-LBP特征融合的头肩检测研究