2016summer 训练第二场

1.http://acm.hdu.edu.cn/showproblem.php?pid=5112

#define _CRT_SECURE_NO_DEPRECATE
#include<iostream>
#include<algorithm>
using namespace std;
const int MAXN = 100000+10;
struct Node{
	int t;
	int x;
	bool operator<(Node&a){
		return t < a.t;
	}
};
Node S[MAXN];
int main(){
	int i, T,n;
	int iCase = 1;
	scanf("%d", &T);
	while(T--){
		scanf("%d", &n);
		for (i = 0; i < n; i++)
			scanf("%d%d", &S[i].t, &S[i].x);
		sort(S, S + n);
		double Max = 0;
		for (i = 0; i < n - 1; i++){
			double v = abs(S[i + 1].x - S[i].x)*1.0 / (S[i + 1].t - S[i].t);
			Max = max(Max, v);
		}
		printf("Case #%d: %.2lf\n",iCase++, Max);
	}
	return 0;
}

  2.http://acm.hdu.edu.cn/showproblem.php?pid=5122

一开始一看到以为求逆序来搞,一看题就写了个数状数组,nlogn超时了。当然一定是太性急了,这个题其实就是判断下它后面是否有数字比它小,有的话需要将其往后移一次,否则不变。这样只需要判断下每个数后面是否有有比它小的数,于是将数组倒置,即为判断每个数前面是否有比它大的数,只需要从前向后扫描一遍,需要一个数Min记录当前已扫描结束的序列中最小的数。这样只要碰到后迷死你右数大于这个最小的数就计数一次,否则更新这个Min。

#define _CRT_SECURE_NO_DEPRECATE
#include<iostream>
#include<algorithm>
using namespace std;
const int MAXN = 10000001;
int a[MAXN];
int main(){
	int i, T, n;
	int iCase = 1;
	scanf("%d", &T);
	while (T--){
		scanf("%d", &n);
		for (i = n; i > 0; i--)
			scanf("%d", &a[i]);
		int Min = a[1];
		int ans = 0;
		for (i = 2; i <= n; i++){
			if (a[i] > Min)
				ans++;
			else
				Min = a[i];
		}
		printf("Case #%d: %d\n",iCase++,ans);
	}
	return 0;
}

  3.http://acm.hdu.edu.cn/showproblem.php?pid=5120

模板很重要啊。这里主要的是求两个圆相交的面积,有了模板直接搞。最终面积=大圆交大圆-2*大圆交小圆+小圆交小圆。

#define _CRT_SECURE_NO_DEPRECATE
#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
const double EPS = 1e-8;
const double pi = acos(-1.0);
struct Point{
	double x, y;
	Point(double a=0, double b=0) :x(a), y(b){}
};
struct Circle{
	Circle(Point a, double x) :o(a), r(x){}
	Point o;
	double r;
};
int RlCmp(double r1, double r2){
	if (abs(r1 - r2) < EPS)
		return 0;
	return r1 < r2 ? -1 : 1;
}
Point operator-(Point a, Point b){
	return Point(a.x - b.x, a.y - b.y);
}
Point operator+(Point a, Point b){
	return Point(a.x + b.x, a.y + b.y);
}
double Mold(Point a){
	return sqrt(a.x*a.x + a.y*a.y);
}
double Dis(Point a, Point b){
	return Mold(a - b);
}
//园与圆相交面积模板
double CircleCrossArea(Circle A,Circle B){
	double r1 = A.r, r2 = B.r;
	double d = Dis(A.o, B.o),r=min(r1,r2);
	if (RlCmp(d, r1 + r2) >= 0)
		return 0;        //相离或者外切
	if (RlCmp(d, abs(r1 - r2)) <= 0)
		return pi*r*r;       //内含
	//将r1放在圆心
	double x1 = (d*d + r1*r1 - r2*r2) / (2 * d);
	double s1 = x1*sqrt(r1*r1 - x1*x1) - r1*r1*acos(x1/r1);
	//将r2放在圆心
	double x2 = (d*d + r2*r2 - r1*r1) / (2 * d);
	double s2 = x2*sqrt(r2*r2 - x2*x2) - r2*r2*acos(x2 / r2);
	return abs(s1 + s2);
}
int main(){
	int T, iCase = 1;
	Point q,o;
	double r1, r2;
	scanf("%d", &T);
	while (T--){
		scanf("%lf%lf",&r1,&r2);
		scanf("%lf%lf",&q.x,&q.y);
		scanf("%lf%lf", &o.x,&o.y);
		Circle A1(q, r1);
		Circle A2(q, r2);
		Circle B1(o, r1);
		Circle B2(o, r2);
		double a = CircleCrossArea(A2, B2);
		double b = CircleCrossArea(A2, B1);
		double c = CircleCrossArea(A1, B1);
		printf("Case #%d: %.6lf\n", iCase++, a - 2 * b + c);
	}
	return 0;
}

  

时间: 2024-11-01 19:57:01

2016summer 训练第二场的相关文章

【补题】多校联合训练第二场

第二场 1001 Is Derek lying? Problem Description Derek and Alfia are good friends.Derek is Chinese,and Alfia is Austrian.This summer holiday,they both participate in the summer camp of Borussia Dortmund.During the summer camp,there will be fan tests at i

【补题】组队训练第二场 &amp; 个人训练第一场

组队第二场: C题 CodeForces Gym 100735D 题意:给你N个木棍,问他们能拼成多少个三角形. 思路:从小到大排序,然后贪心地去取. 1 #include<cstdio> 2 #include<cstring> 3 #include<iostream> 4 #include<algorithm> 5 #include<cmath> 6 #include<vector> 7 #include<set> 8

2015多校训练第二场 hdu5305

把这题想复杂了,一直在考虑怎么快速的判断将选的边和已选的边无冲突,后来经人提醒发现这根本没必要,反正数据也不大开两个数组爆搜就OK了,搜索之前要先排除两种没必要搜的情况,这很容易想到,爆搜的时候注意几个小细节就可以了(代码代码注释中已标好) #include<cstdio> #include<cstring> #include<iostream> #include<vector> #include<utility> using namespace

2016summer 训练第一场

A.http://acm.hdu.edu.cn/showproblem.php?pid=5538 求表面积,只需要将所有的1*1的小块扫描一遍.将每一个块与他相邻四周进行比较,如果该快高度大,则将该快高度减去周围块高度然后累加.复杂度O(nm) #define _CRT_SECURE_NO_DEPRECATE #include<iostream> #include<cmath> #include<algorithm> typedef long long LL; cons

CSU 多校训练第二场 J Pinemi Puzzles

传送门:http://acm.csu.edu.cn:20080/csuoj/problemset/problem?pid=2279 题意: 代码: #include <set> #include <map> #include <deque> #include <queue> #include <stack> #include <cmath> #include <ctime> #include <bitset>

2014多校联合训练第一场(组队训练)

这是我.potaty.lmz第二次训练,毕竟经验不足,加上水平不够,导致我们各种被碾压. A - Couple doubi: 这道题是道比较水的数论.但我们都没想出来要怎么做.后来是potaty提议打个表看看,然后lmz打出表后发现了规律.我还没细看,待研究后再补全. D - Task: 这道题一看就知道是个贪心(现在只要是有deadline的题我都觉得是贪心了).虽然想出来了,但还是不会严格证明为什么只要取满足task的且y最小(y相等时x最小)的machine就行了. 我的做法是把所有mac

联合训练图论场

联合训练图论场题解报告 传送门 A.Euler 题意:略 分析: 这题主要是先掌握欧拉通路的概念,然后是如何判断图是否存在欧拉通路. 欧拉通路:通过图中每条边且只通过一次,并且经过每一顶点的通路. 欧拉回路:通过图中每条边且只通过一次,并且经过每一顶点的回路. 无向图: 欧拉通路:连通图+只存在0个或者两个度数为奇数的点. 欧拉回路:连通图+所有节点的度数均为偶数. 有向图: 欧拉通路:连通图+(所有点的入度=出度 || 出两个点之外其他点的入度=出度,一个点的入度-出度=1,一个点的出度-入度

百度之星2014初赛第二场

A. Scenic Popularity http://acm.hdu.edu.cn/showproblem.php?pid=4831 思路:景点区会控制休息区的Hot值,我们建立休息区到它最近的景点区的关系,注意处理冲突. 查询和修改都暴力进行,预处理关系,从左到右,然后从右到左遍历一遍即可,更新时候,从被修改的p位置,向两边,与p有关的休息区进行更新.总的时间复杂度O(T*n*K),10^8左右,不到1s可以解决. const int maxn = 10000; const int maxh

计蒜之道2015程序设计大赛初赛第二场——人人都有极客精神

计蒜之道2015程序设计大赛初赛第二场——人人都有极客精神 (一)体面 人人公司是一家极为鼓励极客精神的公司,当有重要的项目需要上线但又时间太紧,甚至需要当天上线的时候,往往会挂起海盗旗开启电子日期显示,让大家可以在对时间有更明确的感知的情况下,同心协力搞定重要的项目.海盗旗下方的电子屏显示的日期形式为 YYYYMMDD (年份占 4 位.月份占 2 位.天数占 2 位). 日期电子屏幕上每个数字对应的显示如下图: 从上图可以得知每个数字对应的笔画数,比如 2 的笔画数是 5,8 的笔画数是 7