群赛11----2017.9.20
来源:互联网 发布:漫游数据是什么意思 编辑:程序博客网 时间:2024/06/14 04:59
- T1 The Wall
- 题意
- 解法
- 代码
- 网址这一题
- 小结
- T2 Maximal Area Quadrilateral
- 题意
- 解法
- 代码
- 网址这一题
- 小结
- T3 Tourist Problem
- 题意
- 解法
- 代码
- 网址这一题
- 小结
- T4 Bubble Sort Graph
- 题意
- 解法
- 代码
- 网址这一题
- 小结
- T5 Iahub and Permutations
- 题意
- 解法
- 代码
- 网址这一题
- 小结
T1 The Wall
题意:
给出k,g,a,b四个数,问在ab范围内有多少个既是k的倍数,g的倍数的数。
解法:
暴力.
代码:
#include <bits/stdc++.h>using namespace std;int main(){ int a, b, c, d, bei; scanf("%d%d%d%d", &a, &b, &c, &d); bei = a / __gcd(a, b) * b; if (c % bei == 0) cout << d / bei - c / bei + 1; else cout << d / bei - c / bei; return 0;}
网址:这一题
小结:
**此类题目水题。**
T2 Maximal Area Quadrilateral
题意:
给出k个点的坐标,问能组成的最大的正方形的面积。
解法:
几何.
代码:
#include <bits/stdc++.h>using namespace std;#define M 350#define eps 0#define inf 10000000000int n, i, j, k;double max1, max2, max3, yong;struct node{ double x, y;} p[M];double jisuan(int i, int j, int k){ return ((p[k].x - p[i].x) * (p[k].y - p[j].y) - (p[k].y - p[i].y) * (p[k].x - p[j].x)) / 2.0;}struct line{ void guochen() { for (j = 0; j < n; j++) { if (i == j) continue; max1 = -inf, max2 = -inf; for (k = 0; k < n; k++) { if (i == k || j == k) continue; yong = jisuan(i, j, k); if (yong < eps) max1 = max(max1, -yong); else max2 = max(max2, yong); } max3 = max(max3, max1 + max2); } }} hanshu;int main(){ cin >> n; for (i = 0; i < n; i++) scanf("%lf%lf", &p[i].x, &p[i].y); max1 = -inf, max2 = -inf, max3 = -inf; for (i = 0; i < n; i++) hanshu.guochen(); printf("%.6f\n", max3); return 0;}
网址:这一题
小结:
**此类题目暴力。**
T3 Tourist Problem
题意:
给出几个点在一条线上,两个点的距离是两个点的坐标差,输出所有走法的和除以走法数的分子和分母。
解法:
暴力优化。
代码:
#include "bits/stdc++.h"using namespace std;#define LL long long#define N 10000000LL a[N + 1];LL s1 = 0, s2 = 0, s3 = 0, ans, p, q;int main(){ LL n; cin >> n; for (LL i = 1; i <= n; i++) { cin >> a[i]; s1 += a[i]; } sort(a + 1, a + n + 1); for (LL i = 1; i <= n; i++) { if (i > 1) s3 += a[i - 1]; s2 += ((i - 1) * a[i] - s3); } ans = s2 * 2 + s1; p = ans / (__gcd(ans, n)); q = n / (__gcd(ans, n)); cout << p << " " << q;}
网址:这一题
小结:
**此类题目优化。**
T4 Bubble Sort Graph
题意:
给你一个数列,利用冒泡排序,将交换的两个数相联系,问有一个子集,其内的元素一一无关,输出最大的子集大小。
解法:
归并排序
代码:
#include <bits/stdc++.h>using namespace std;#define N 500000int a[N],d[N];int main(){ int n; scanf("%d", &n); for (int i = 1; i <= n; i++) scanf("%d", &a[i]); if (n == 0) { printf("0\n"); return 0; } d[1] = a[1]; int len = 1; for (int i = 2; i <= n; i++) { if (a[i] >= d[len]) d[++len] = a[i]; else { int j = upper_bound(d + 1, d + len + 1, a[i]) - d; d[j] = a[i]; } } printf("%d\n", len); return 0;}
网址:这一题
小结:
**此类题目较水。**
T5 Iahub and Permutations
题意:
自己看,不会讲.(错排加强版)
解法:
根据题意写就行了,找规律。
代码:
#include <bits/stdc++.h>#define ll long longusing namespace std;const int p = 1e9 + 7;ll f[2010], gg[2010];int sum = 0, num = 0, a[2010], n;int main(){ scanf("%d", &n); gg[0] = 1; for (int i = 1; i <= n; ++i) { scanf("%d", &a[i]); if (a[i] == -1) sum++; } for (int i = 1; i <= n; ++i) if (a[i] != -1 && a[a[i]] == -1) num++; for (int i = 1; i <= num; ++i) gg[i] = gg[i - 1] * i % p; int t = sum - num; f[0] = gg[num]; for (int i = 1; i <= t; ++i) { f[i] = ((num + i - 1) * f[i - 1]) % p; if (i > 1) f[i] = (f[i] + (i - 1) * f[i - 2]) % p; } printf("%lld", f[t]);}
网址:这一题
小结:
**此类题目较难。**
阅读全文
0 0
- 群赛11----2017.9.20
- 群赛8总结----2017.9.11
- 群赛12----2017.9.24
- 群赛13----2017.9.24
- 群赛14----2017.9.24
- 群赛15----2017.9.25
- 群赛16----2017.9.26
- 群赛2总结-----2017.9.4
- 群赛4总结----2017.9.6
- 群赛5总结----2017.9.7
- 群赛6总结----2017.9.8
- 群赛7总结----2017.9.9
- 2017.9.20
- 群赛9总结----2017.9.16(奇怪题目)
- 群赛10总结----2017.9.16(又是奇怪题目)
- 2017.9.20遇到问题
- 2017.9.20 模拟考试
- 群赛
- 《生活是一场完美的自我欺骗》
- Valid Parentheses
- 同步代码块时加锁对象改变而引发的情况
- Angular4记账webApp练手项目之四(在Angular4项目中用echarts绘制图表)
- 第三周——顺序表的基本运算
- 群赛11----2017.9.20
- 44.Scala中View Bounds代码实战及其在Spark中的应用源码解析
- (HR面试)最常见的面试问题和技巧性答复
- LeetCode 542. 01 Matrix
- 第一章绪论
- 人工智能中的偏序规划-基于STRIPS语言
- 在一个Android项目里面有两个可运行文件,如何实现调用方式
- C++ 重载运算符 友元函数作为重载运算符 重载运算符+
- angularjs综合题