请教下POJ的2623,总是超时啊??
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请教下POJ的2623,总是超时啊??相关的知识,希望对你有一定的参考价值。
#include<iostream>
using namespace std;
long partition(unsigned long s[],long p,long r)
long i,j;
unsigned long x,t;
x=s[r];
i=p-1;
for(j=p;j<r;j++)
if(s[j]<=x)
i++;
t=s[i];
s[i]=s[j];
s[j]=t;
t=s[i+1];
s[i+1]=s[r];
s[r]=t;
return (i+1);
unsigned long nth_element(unsigned long *data,long left,long right,long n)
long k=n-1;
if(left>right)
return -1;
while(1)
int i=partition(data,left,right);
if(k<i)
right=i-1;
else if(k>i)
left=i+1;
else
return data[i];
int main()
long n;
unsigned long a[250002];
cin>>n;
for(long i=0;i<n;i++)
cin>>a[i];
if(n&1)
cout<<nth_element(a,0,n-1,n/2+1)<<".0"<<endl;
else
printf("%lg\n",(double)(nth_element(a,0,n-1,n/2)+nth_element(a,0,n-1,n/2+1))/2);
return 0;
你试试看这组数据会不会超时
250000
1
2
3
...(省略249996行)
250000
把你的partition随机化就可以了
具体做法是,首先取一个随机数q,并且p<=q<=r
然后交换s[q]和s[r]
然后接着你的x=s[r]...就可以了
也就是在partition的时候用一个随机的元素而不总是s[r]来进行分隔
这样就不会被有序的数组卡掉了
2570 大牛们请教,总是WA,思路跟HDU论坛上一样啊
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=2570
#include <stdio.h>
int main()
int t,n;
double v,w,s,k,a;
double p[110],max,temp;
int i,j;
int local;
while(scanf("%d",&t)!=EOF)
while(t--)
scanf("%d%lf%lf",&n,&v,&w);
for(i=0;i<n;i++)
scanf("%lf",&p[i]);
for(i=n;i>0;i--)
max=p[0];
local=0;
for(j=0;j<i;j++)
if(max<p[j])
max=p[j];
local=j;
temp=p[i-1];
p[i-1]=p[local];
p[local]=p[i-1];
s=0;
k=0;
a=0;
for(i=0;i<n;i++)
a=a+p[i]/100*v; //a为溶质
s=a/(v*(k+1));
if(s<=w/100)
k++;
else
a=a-p[i]/100*v;
s=a/(v*(k));
printf("%.0lf %.2lf\n",k*v,k==0?0:s);
return 0;
请大家帮我看下哪里错,我郁闷一上午了
1
2 1 6
5 7
(0.05+0.07不一定等于0.06+0.06哦)
对于实数的处理,一般给出一个误差eps,认为两个数只要在这个误差内,就算两个数相等
下面给出我的代码。
//Code by SCROOKE 2010-1-28 11:21:07
//Code for 紫英落 (baidu)
//HDU 2570
#include <iostream>
#include <algorithm>
using namespace std;
int main()
int n,p,q,r,s,t;
int a[100];
scanf("%d",&n);
while (n--)
scanf("%d%d%d",&p,&q,&t);
for (s=0;s<p;s++)
scanf("%d",&a[s]);
a[s]-=t;
sort(a,a+p);
r=0;
for (s=0;s<p;s++)
if (r+a[s]<=0)
r+=a[s];
else break;
if (s)
printf("%d %.2f\n",s*q,0.01*t+r*0.01/s);
else printf("%d %.2f\n",0,0);
return 0;
参考技术A 看了下自己的提交。没做过。
但是感觉可以用贪心算法解。
等我解解看
已解。AC代码如下,纯粹的贪心算法,重点在排序和溶质的计算
#include <iostream>
#include <algorithm>
using namespace std;
int main()
int n, v, w, a[101], i, vol, c;
double p;
cin >> c;
while (c--)
cin >> n >> v >> w;
vol = 0;
p = 0;
for (i = 1; i <= n; i++)
cin >> a[i];
sort(&a[1], &a[n] + 1);
for (i = 1; i <= n; i++)
if ((vol * p + v * a[i]) / (vol + v) > w)
break;
else
p = (vol * p + v * a[i]) / (vol + v);
vol += v;
printf("%d %.2lf\n", vol, p / 100);
以上是关于请教下POJ的2623,总是超时啊??的主要内容,如果未能解决你的问题,请参考以下文章
请问linux下ln -sf啥意思啊 。 请教指点。感激不尽 。
可不可以想你请教一下,怎么在hypermesh里设置面接触啊?nastran的求解器。