poj 4014 Dice 贪心

//poj 4014
//sep9
#include <iostream>
#include <algorithm>
using namespace std;
int n;
struct DICE
{
	int ids;
	int num;
	int a[128];
}d[1024];

int cmp1(DICE x,DICE y)
{
	return x.num<y.num;
}

int cmp2(DICE x,DICE y)
{
	return x.ids<y.ids;
}
int main()
{
	scanf("%d",&n);
	int sum=0;
	double ans=0;
	for(int i=1;i<=n;++i){
		scanf("%d",&d[i].num);
		sum+=d[i].num;
		d[i].ids=i;
	}
	sort(d+1,d+1+n,cmp1);
	for(int i=1;i<=n;++i)
		for(int j=1;j<=d[i].num;++j){
			d[i].a[j]=sum--;
			ans+=d[i].a[j]*1.0/d[i].num;
		}
	sort(d+1,d+1+n,cmp2);
	printf("%.5lf\n",ans);
	for(int i=1;i<=n;++i){
		for(int j=1;j<=d[i].num;++j)
			printf("%d ",d[i].a[j]);
		printf("\n");
	}
	return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-12 14:51:01

poj 4014 Dice 贪心的相关文章

poj 1456 Supermarket (贪心+并查集)

# include <stdio.h> # include <algorithm> # include <string.h> using namespace std; int fa[10010]; struct node { int p; int d; }; struct node a[10010]; bool cmp(node a1,node a2)//利润从大到小 { return a1.p>a2.p; } int find(int x) { if(fa[x]

POJ 1862 Stripies 贪心+优先队列

http://poj.org/problem?id=1862 题目大意: 有一种生物能两两合并,合并之前的重量分别为m1和m2,合并之后变为2*sqrt(m1*m2),现在给定n个这样的生物,求合并成一个的最小重量 思路: m1+m2 >=  2*sqrt(m1*m2) 所以每次取大的去合并,能变小. 直接优先队列就可以啦. #include<cstdio> #include<cmath> #include<queue> using namespace std;

poj 2431 Expedition 贪心+最大堆

当油量不够时从走过的油站中选最大加油量的 #include<iostream> #include<queue> #include<stdlib.h> #include<algorithm> using namespace std; #define MAX_N 10005 struct node{ int dist,fuel; }t[MAX_N]; bool cmp(const node &a,const node &b) { return a

poj 3298 Antimonotonicity 贪心

题意: 求一个序列的最大子序列,该子序列满足:a1>a2<a3>a4...... 分析: 贪心,从极大值起交替取这个序列中极小值.极大值. 代码: //poj 3298 //sep9 #include <iostream> using namespace std; const int maxN=30024; int a[maxN]; int main() { int cases; scanf("%d",&cases); while(cases--)

poj 3404&amp;&amp;poj1700(贪心)

Bridge over a rough river Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 4143   Accepted: 1703 Description A group of N travelers (1 ≤ N ≤ 50) has approached an old and shabby bridge and wishes to cross the river as soon as possible. Ho

poj 1230 Pass-Muraille 贪心

题意: 给一些平行于x轴的墙,求最少去掉多少墙使得x轴上每点穿过不超过k面墙. 分析: 一开始还以为是重复覆盖问题(取最少的行使每列至少一个1),其实这题是可以用贪心解的(类似取最多的行使每列至多k个1). 代码: //poj 1230 //sep9 #include <iostream> using namespace std; const int maxN=128; int n,max_k,maxx,maxy; int g[maxN][maxN]; int work() { int ans

poj -3614 Sunscreen(贪心 + 优先队列)

http://poj.org/problem?id=3614 有c头奶牛在沙滩上晒太阳,每头奶牛能忍受的阳光强度有一个最大值(max_spf) 和最小值(min_spf),奶牛有L种防晒霜,每种可以固定阳光强度在某一个值,每种的数量是cover[i] ,每头奶牛只能用一瓶防晒霜,问最多有多少头奶牛能在沙滩上晒太阳. 理解题意之后还是挺好做的. 首先确定的贪心策略是,在满足min_spf的条件下,尽量用spf小的用在max_spf大的奶牛身上,用一个最小堆维护max_spf的最小值即可. 先对奶牛

poj 3270(置换群+贪心)

Cow Sorting Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 6993   Accepted: 2754 Description Farmer John's N (1 ≤ N ≤ 10,000) cows are lined up to be milked in the evening. Each cow has a unique "grumpiness" level in the range 1...

poj 3154 Graveyard 贪心

//poj 3154 //sep9 #include <iostream> #include <cmath> using namespace std; double a[2048]; double b[2048]; int main() { int n,m; while(scanf("%d%d",&n,&m)==2){ for(int i=0;i<n;++i) a[i]=i*(10000.0/n); for(int i=0;i<(n+