携程编程大赛 (预赛第二场)
来源:互联网 发布:抽签的软件 编辑:程序博客网 时间:2024/05/21 05:58
A:和食物链做法一样,带权并查集
B:dp,01背包背出所有能组成边情况,在用这些情况去计算面积保留最大值
C:每个点从后往前搜,搜到合适就输出,搜不到就输出255 255 255
D:博弈,如果成对成对出现后手胜,否则先手胜
A:
#include <stdio.h>#include <string.h>const int N = 10005;int t, n, m, parent[N], rank[N];int find(int x) { if (parent[x] == x) return x; int t = find(parent[x]); rank[x] = (rank[parent[x]] + rank[x]) % 3; return parent[x] = t;}int main() { scanf("%d", &t); while (t--) { scanf("%d%d", &n, &m); for (int i = 1; i <= n; i++) { parent[i] = i; rank[i] = 0; } int ans = 0; while (m--) { int q, x, y; scanf("%d%d%d", &q, &x, &y); if (x > n || y > n) ans++; else if (q == 2 && x == y) { ans++; } else { int px = find(x); int py = find(y); if (px == py) { if (q == 1 && rank[x] != rank[y]) ans++; else { if (q == 2 && rank[y] != (rank[x] + 1) % 3) ans++; } } else { parent[py] = px; rank[py] = (rank[x] - rank[y] + 2 + q) % 3; } } } printf("%d\n", ans); } return 0;}
B:
#include <stdio.h>#include <string.h>#include <algorithm>#include <math.h>using namespace std;#define INF 0x3f3f3f3fconst int N = 805;int n, num[N], dp[N][N], sum;double cal(int a, int b, int c) { double x = (a * a - b * b + c * c) * 1.0 / (2 * c * 1.0); double h = sqrt(a * a * 1.0 - x * x); return c * h / 2;}int main() { while (~scanf("%d", &n) && n) { sum = 0; for (int i = 0; i < n; i++) { scanf("%d", &num[i]); sum += num[i]; } memset(dp, 0, sizeof(dp)); dp[0][0] = 1; for (int i = 0; i < n; i++) { for (int j = sum / 2; j >= 0; j--) { for (int k = sum / 2; k >= 0; k--) { if (j - num[i] >= 0) { if (dp[j - num[i]][k]) dp[j][k] = 1; } if (k - num[i] >= 0) { if (dp[j][k - num[i]]) dp[j][k] = 1; } } } } double ans = -INF; for (int i = 0; i <= sum / 2; i++) { for (int j = 0; j <= sum / 2; j++) { if (dp[i][j] == 0) continue; int k = sum - i - j; if (i + j > k && k + j > i && i + k > j) { ans = max(ans, cal(i, j, k)); } } } if (ans < 0) printf("-1\n"); else printf("%d\n", (int)(ans * 100)); } return 0;}
C:
#include <stdio.h>#include <string.h>const int N = 1005;int n, m;struct BIT { int x1, y1, x2, y2, r, g, b; void scanf_() { scanf("%d%d%d%d%d%d%d", &x1, &y1, &x2, &y2, &r, &g, &b); }} b[N];int main() { while (~scanf("%d%d", &n, &m) && n + m) { for (int i = 0; i < n; i++) b[i].scanf_(); int x, y; while (m--) { scanf("%d%d", &x, &y); int i; for (i = n - 1; i >= 0; i--) { if (x >= b[i].x1 && x <= b[i].x2 && y >= b[i].y1 && y <= b[i].y2) { printf("%d %d %d\n", b[i].r, b[i].g, b[i].b); break; } } if (i == -1) printf("255 255 255\n"); } } return 0;}
D:
#include <stdio.h>#include <string.h>const int N = 15;int n, num, vis[105];bool judge() { for (int i = 0; i <= 100; i++) if (vis[i] % 2) return true; return false;}int main() { while (~scanf("%d", &n) && n) { memset(vis, 0, sizeof(vis)); for (int i = 0; i < n; i++) { scanf("%d", &num); vis[num]++; } if (judge()) printf("Win\n"); else printf("Lose\n"); } return 0;}
坚持.....
0 0
- 携程编程大赛预赛第二场
- 携程编程大赛 (预赛第二场)
- CodingTrip - 携程编程大赛 (预赛第二场)
- CodingTrip - 携程编程大赛 (预赛第一场)第二题 括号匹配
- CodingTrip - 携程编程大赛 (预赛第二场):位图像素的颜色
- CodingTrip - 携程编程大赛 (预赛第二场):1001 剪刀石头布
- 携程编程大赛 (预赛第二场)第三题【位图像素的颜色】
- CodingTrip - 携程编程大赛 (预赛第二场)——位图像素的颜色
- 携程编程大赛 (预赛第二场)第一题【剪刀石头布】
- CodingTrip - 携程编程大赛 (预赛第二场) 位图像素的颜色
- CodingTrip - 携程编程大赛 (预赛第一场)
- CodingTrip - 携程编程大赛 (预赛第一场)
- 携程编程大赛 (预赛第一场)
- CodingTrip - 携程编程大赛 (预赛第一场)
- CodingTrip - 携程编程大赛 (预赛第二场)1001剪刀石头布&1003 位图像素的颜色
- CodingTrip - 携程编程大赛 (预赛第一场)第三题 携程全球数据中心建设
- 携程编程大赛 (预赛第一场)1004旋转的二进制
- CodingTrip - 携程编程大赛 (预赛第一场) 括号匹配
- IOS-内存管理
- AOJ-0121
- android中的尺寸单位 dp dip px pt sp mm in 解释
- VC打印机使用 win95环境的下例子测试
- 第6周作业-图像缩放显示
- 携程编程大赛 (预赛第二场)
- Spring的自动装配(byName;byType)
- 亚伦•斯沃茨:怎样有效利用时间
- 求职面试的时候如何谈薪酬待遇
- 马步站桩22个要领的几个关键问题解释
- 字典树
- 使用 XSL 样式表无法查看 XML 输入。请更正错误然后单击 刷新按钮,或以后重试。
- 写给Git初学者的7个建议
- 第6周作业-图像缩放显示(改)