2014 CodingTrip - 携程编程大赛 (预赛第二场)
1001: 食物链(poj1182),直接贴代码,稍作可过
并查集
//
// main.cpp
// 携程1
//
// Created by zhang on 14-4-11.
// Copyright (c) 2014年 apple. All rights reserved.
// #include <iostream>
#include <cstring>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <string>
#include <vector>
#include <list>
#include <map>
#include <queue>
#include <stack>
#include <bitset>
#include <algorithm>
#include <numeric>
#include <functional> using namespace std;
const int maxk=;
int N,K;
int D[maxk],X[maxk],Y[maxk];
int par[*maxk],rankh[*maxk]; void init(int n)
{
for(int i=;i<n;i++)
{
par[i]=i;
rankh[i]=;
}
}
int find(int x)
{
if (par[x]==x)
{
return x;
}
else return par[x]=find(par[x]);
} void unite(int x,int y)
{
x=find(x);
y=find(y);
if(x==y) return; if(rankh[x]<rankh[y])
{
par[x]=y;
}
else
{
par[y]=x;
if(rankh[x]==rankh[y]) rankh[x]++;
}
} bool same(int x,int y)
{
return find(x)==find(y);
} int main()
{
//freopen("Users/apple/Desktop/携程1/携程1.in","r",stdin);
//freopen("Users/apple/Desktop/携程1/携程1.out","w",stdout);
int T;
scanf("%d",&T);
while (T--) { scanf("%d%d",&N,&K);
init(*N);
for(int i=;i<K;i++)
{
scanf("%d %d %d",&D[i],&X[i],&Y[i]);
} int ans=;
for(int i=;i<K;i++)
{
int t=D[i];
int x=X[i]-,y=Y[i]-; if(x<||N<=x||y<||N<=y)
{
ans++;
continue;
}
if(t==)
{
if(same(x,y+N)||same(x,y+*N))
{
ans++;
}
else
{
unite(x,y);
unite(x+N,y+N);
unite(x+*N,y+*N);
}
}
else
{
if (same(x,y)||same(x,y+*N))
ans++;
else
{
unite(x,y+N);
unite(x+N,y+*N);
unite(x+*N,y);
}
}
} printf("%d\n",ans);
}
return ;
}
1001
1002: dp[i][j] 表示第一条边为i, 第二条边的长度为 j 是否可行。 然后对所有可行的三条边的组合求最大三角形面积即可。
三角形面积:海伦公式
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <vector>
#include <cmath> using namespace std; const int INF = ;
const int MAXL = ;
const int MAXN = ; int n;
int a[MAXN];
int ans;
bool dp[MAXL][MAXL]; int my_abs(int x) {
return x > ? x : -x;
} double Area(double x, double y, double z) {
double p = (x+y+z)/;
return sqrt(p*(p-x)*(p-y)*(p-z));
} bool check(int x, int y, int z) {
int t[] = {x, y, z};
sort(t, t+);
if (t[]+t[] <= t[]) return false;
return true;
} int main() {
#ifdef Phantom01
freopen("1002.txt", "r", stdin);
#endif // Phantom01 while (scanf("%d", &n)!=EOF) {
if (==n) break; int sum = ;
for (int i = ; i < n; i++) {
scanf("%d", &a[i]);
sum += a[i];
}
memset(dp, false, sizeof(dp));
dp[][] =true; for (int k = ; k < n; k++)
for (int i = sum - a[k]; i >= ; i--)
for (int j = sum - a[k]; j >= ; j--) {
dp[i+a[k]][j] = dp[i][j] || dp[i+a[k]][j];
dp[i][j+a[k]] = dp[i][j] || dp[i][j+a[k]];
}
ans = -;
for (int i = ; i <= sum; i++)
for (int j = ; j <= sum; j++) if (dp[i][j]) {
if (check(i, j, sum-i-j))
ans = max((int)(Area(i, j, sum-i-j)*), ans);
}
printf("%d\n", ans);
} return ;
}
1002
1003: 二维线段树可做,不过因为数据范围比较小,逆序枚举所以矩形,看该点最后落在哪个矩形中。
#include <cstdio>
#include <cstring>
#include <iostream> using namespace std; const int MAXN = ; int x[MAXN*], y[MAXN*];
int x1[MAXN], x2[MAXN], y1[MAXN], y2[MAXN], R[MAXN], G[MAXN], B[MAXN];
int n, m;
int cntx, cnty; bool check(int px, int py, int k) {
if (x1[k]<=px&&px<=x2[k] && y1[k]<=py&&py<=y2[k])
return true;
return false;
} int main() {
#ifdef Phantom01
freopen("1003.txt", "r", stdin);
#endif // Phantom01 while (scanf("%d%d", &n, &m)!=EOF) {
if (==n&&==m) break;
cntx = cnty = ;
for (int i = ; i < n; i++) {
scanf("%d%d%d%d%d%d%d", &x1[i], &y1[i], &x2[i], &y2[i], &R[i], &G[i], &B[i]);
}
for (int i = ; i < m; i++) {
int px, py;
bool flag = false;
scanf("%d%d", &px, &py);
for (int j = n-; j >= ; j--)
if (check(px, py, j)) {
flag = true;
printf("%d %d %d\n", R[j], G[j], B[j]);
break;
}
if (!flag) puts("255 255 255");
}
} return ;
}
1003
1004: 可以证明,只有对称的时候后手能赢
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std; int main()
{
int n, i;
int a[];
while(scanf("%d", &n), n) {
for(i = ; i < n; ++i) scanf("%d", a+i);
sort(a, a+n);
int cnt = ;
bool flag = ;
for(i = ; i < n; ++i) {
if(a[i] == a[i-]) cnt++;
else {
if(cnt&) {
flag = ;
break;
}
else cnt = ;
}
}
if(!flag) puts("Lose");
else puts("Win");
}
return ;
}
1004
2014 CodingTrip - 携程编程大赛 (预赛第二场)的更多相关文章
- 2014 CodingTrip - 携程编程大赛 (预赛第一场)
1001: 可以证明(扩展欧几里得),只要卡片中有两个卡片互素,旁边点就是可达的. 因此只需要算出所有卡片不互素的情况有多少种,可用容斥原理. #include <cstdio> #inc ...
- 【解题报告】[动态规划] CodingTrip - 携程编程大赛 (预赛第一场)- 聪明的猴子
原题: 聪明的猴子 Time Limit : 2000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) Problem D ...
- 位图像素的颜色 携程编程大赛hdu
位图像素的颜色 Time Limit: 2000/1000 MS (Java/Others) MemoryLimit: 32768/32768 K (Java/Others) Total Sub ...
- 2014百度之星预赛(第二场)——Best Financing
2014百度之星预赛(第二场)--Best Financing Problem Description 小A想通过合理投资银行理財产品达到收益最大化.已知小A在未来一段时间中的收入情况,描写叙述为两个 ...
- 2013腾讯编程马拉松初赛第二场(3月22日) 小Q系列故事——为什么时光不能倒流 ---好水!!
我以为我会是最坚强的那一个 我还是高估了自己 我以为你会是最无情的那一个 还是我贬低了自己 就算不能够在一起 我还是为你担心 就算你可能听不清 也代表我的心意 那北极星的眼泪 闪过你曾经的眼角迷离 那 ...
- [转] 携程App网络服务通道治理和性能优化@2016
App网络服务的高可靠和低延迟对于无线业务稳定发展至关重要,过去两年来我们一直在持续优化App网络服务的性能,到今年Q2结束时基本完成了App网络服务通道治理和性能优化的阶段性目标,特此撰文总结其中的 ...
- poj1182 and 携程预赛2第一题 带权并查集
题意: 动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形.A吃B, B吃C,C吃A. 现有N个动物,以1-N编号.每个动物都是A,B,C中的一种,但是我们并不知道它到底 ...
- 【BFS + Hash】拼图——携程2017春招编程题2
写在前面 前天参加了携程的网测--还是感觉自己太!渣!了! _(:з」∠)_ 时光匆匆啊,已经到了开始思考人生的时候了(算了不矫情了)--总之写个博客来督促一下自己.之前太懒了,很多时候都是输在 ...
- 携程Android App插件化和动态加载实践
携程Android App的插件化和动态加载框架已上线半年,经历了初期的探索和持续的打磨优化,新框架和工程配置经受住了生产实践的考验.本文将详细介绍Android平台插件式开发和动态加载技术的原理和实 ...
随机推荐
- 用canvas画一个的小画板(PC端移动端都能用)
前言 本篇的内容主要包括: canvas标签简介 画板的功能简介 画板的JS部分(包括:1.获取画布 2.使画板全屏幕显示且自适应 3.如何绘制直线 4.绘画时的三种状态(鼠标点击.移动.离开)5.画 ...
- 14:Challenge 7(map大法好)
总时间限制: 10000ms 单个测试点时间限制: 1000ms 内存限制: 262144kB 描述 给一个长为N的数列,有M次操作,每次操作是以下两种之一: (1)修改数列中的一个数 (2)求 ...
- Struts2.3.16.1+Hibernate4.3.4+Spring4.0.2 框架整合(转)
原文 http://blog.csdn.net/songanling/article/details/22454973 最新版Struts2+Hibernate+Spring整合 目前为止三 ...
- jq滚动条美化
https://github.com/inuyaksa/jquery.nicescroll(插件地址) https://blog.csdn.net/zyy_0725/article/details/8 ...
- 【BZOJ4071】【APIO2015】巴邻旁之桥
题意: Description 一条东西走向的穆西河将巴邻旁市一分为二,分割成了区域 A 和区域 B. 每一块区域沿着河岸都建了恰好 1000000001 栋的建筑,每条岸边的建筑都从 0 编号到 1 ...
- 系统级脚本 rpcbind
[root@web02 ~]# vim /etc/init.d/rpcbind #! /bin/sh # # rpcbind Start/Stop RPCbind # # chkconfig: 234 ...
- 紫书 例题8-13 UVa 11093 (反证法)
这道题发现一个性质就解决了 如果以i为起点, 然后一直加油耗油, 到p这个地方要去p+1的时候没油了, 那么i, i+1, --一直到p, 如果以这些点 为起点, 肯定也走不完. 为什么呢? 用反证法 ...
- Linux头文件的设置
GCC/G++会查找系统默认的include和link的路径,以及自己在编译命令中指定的路径. 1.include头文件路径 除了默认的/usr/include, /usr/local/include ...
- SVN学习总结(2)——SVN冲突解决
在我们用VS进行项目合作开发的过程中,SVN的提交控制是至关重要的,大家不可避免的都遇到过SVN冲突的问题,开发的时候,应该认真学习SVN的知识,减少冲突,集中时间放在开发上. 解决冲突有三种方式: ...
- Android源代码解析之(十三)-->apk安装流程
转载请标明出处:一片枫叶的专栏 上一篇文章中给大家分析了一下android系统启动之后调用PackageManagerService服务并解析系统特定文件夹.解析apk文件并安装的过程,这个安装过程实 ...