5
22
2015
0

poj 1328 Radar Installation

//总结:细节决定成败。
//判断是否输出-1的部分break,continue细节弄错错了好久
//大致思路:对于每个岛,x正负sqrt(d^2-y^2)的线段上的点都可以包含
//所以就是对于n条线段进行区间取点问题。
#include <iostream>
#include <algorithm>
#include <cmath>
#include <cstdio>
#define sqr(x) (x)*(x)
using namespace std;

struct Point{
	double x;
	double y;
}p[1000];

bool cmp(Point a,Point b){
	if (a.y!=b.y) return a.y<b.y;
	return a.x>b.x;
}

int main()
{
	int c=0,n,d;
	while (cin>>n>>d){
		if (n==0 && d==0) break;
    bool flag=false;
		for (int i=0;i<n;++i){
			cin>>p[i].x>>p[i].y;
			if (!flag && p[i].y>d){
				cout<<"Case "<<(++c)<<": -1\n";
        flag=true;
			}
			double t=sqrt(sqr(d)-sqr(p[i].y));
			p[i].y=p[i].x;
			p[i].x-=t; p[i].y+=t;
		}
    if (flag) continue;

		sort(p,p+n,cmp);
		int ans=1;
		double cur=p[0].y;
		for (int i=1;i<n;++i)
			if (cur<p[i].x){
				cur=p[i].y; ++ans;
			}
		cout<<"Case "<<(++c)<<": "<<ans<<endl;
	}
	return 0;
}
Category: 题解 | Tags: 贪心 POJ
5
17
2015
0

暴力求pi

//精度有点低啊。。
#include <stdio.h>
#include <time.h>
const int r=1000;
const int lim=100000000;
int main()
{
	int cnt=0;
	srand(time(0));
	int i;
	for (i=1;i<=lim;++i) {
		long long x=rand()%r+1;
		long long y=rand()%r+1;
		if (x*x+y*y<=r*r) ++cnt;
	}
	printf("pi=%f",cnt*4.0/lim);
	return 0;
}
Category: 折腾 | Tags:
5
2
2015
0

CODEVS 1003 电话连线

//使用prim算法即可
#include <iostream>
#include <climits>
using namespace std;

int n,a[101][101],f[101],pre[101],s[101],t[101];
bool b[101];
int main()
{
	cin>>n;
	for (int i=1;i<=n;++i)
		for (int j=1;j<=n;++j) {
			cin>>a[i][j];
			a[j][i]=a[i][j];
		}
	for (int i=1;i<=n;++i) f[i]=INT_MAX/3;
	f[1]=0; int cnt=n,ans=0,m=0;
	while (cnt--) {
		int p,v=INT_MAX/3;
		for (int i=1;i<=n;++i)
			if (f[i]<v && !b[i]) {
				p=i;
				v=f[i];
			}
		ans+=v; f[p]=0; b[p]=1;
		if (v!=0 && p!=1) { //如果是非0边,则记录下来
			++m;
			s[m]=pre[p];
			t[m]=p;
		}
		for (int i=1;i<=n;++i)
			if (f[p]+a[p][i]<f[i]) {
				f[i]=f[p]+a[p][i];
				pre[i]=p; //更新pre[i]
			}
	}
	cout<<m<<endl;
	for (int i=1;i<=m;++i)
		if (s[i]<t[i]) cout<<s[i]<<' '<<t[i]<<endl;
		else cout<<t[i]<<' '<<s[i]<<endl;
	cout<<ans;
	return 0;
}
Category: 题解 | Tags: CODEVS 数据结构 MST

Host by is-Programmer.com | Power by Chito 1.3.3 beta | Theme: Aeros 2.0 by TheBuckmaker.com