刷题总结(9.30)

1.关于二维数组存放两类数据qsort:

array[][0]存放一类,array[][1]存放另一类

然后qsort(array,n,sizeof(array[0]),cmp);

int cmp(int *a,int *b){

        return a[1]-b[1];

}

2.[USACO5.1]圈奶牛Fencing the Cows(P2742)

凸包模板:

#include <bits/stdc++.h>
using namespace std;

struct dot{
	double x,y;
}a[100005],s[100005];

double check(dot a1,dot a2,dot b1,dot b2){
	return (a2.x-a1.x)*(b2.y-b1.y)-(b2.x-b1.x)*(a2.y-a1.y);
}

double d(dot m,dot n){
	return sqrt((n.y-m.y)*(n.y-m.y)+(n.x-m.x)*(n.x-m.x));
}

bool cmp(dot m,dot n){
	double tem=check(a[1],m,a[1],n);
	if(tem>0) return 1;
	else if(tem==0&&d(a[1],m)<d(a[1],n)) return 1;
	else return 0;
}

int main(){
	ios::sync_with_stdio(false);
	cin.tie(0);
	int n;
	double tem;
	cin >> n;
	for(int i=1;i<=n;i++){
		cin >> a[i].x >> a[i].y;
		if(i!=1&&a[i].y<a[1].y){
			tem=a[i].x;a[i].x=a[1].x;a[1].x=tem;
			tem=a[i].y;a[i].y=a[1].y;a[1].y=tem;
		}
		else if(i!=1&&a[i].y==a[1].y&&a[i].x<a[1].x){
			tem=a[i].x;a[i].x=a[1].x;a[1].x=tem;
			tem=a[i].y;a[i].y=a[1].y;a[1].y=tem;
		}
	}
	sort(a+2,a+n+1,cmp);
	s[1]=a[1];
	int st=1;
	for(int i=2;i<=n;i++){
		while (st>1&&check(s[st-1],s[st],s[st],a[i])<=0) st--;
		s[++st]=a[i];
	}
	s[st+1]=a[1];
	double ans=0;
	for(int i=1;i<=st;i++){
		ans+=d(s[i],s[i+1]);
	}
	printf("%.2f",ans);
	return 0;
}

上一篇:excel学习之VLOOKUP函数


下一篇:c++虚继承汇编及内存布局分析(基于visual studio 2019)