130407周赛 (二)

2014-11-24 03:12:45 · 作者: · 浏览: 11
x * x + 3 * x + 6 ;
return c;
}
int main()
{
int T;
cin >> T;
while( T -- )
{
double x ;
cin >> x ;
if(x < cal(0.0) || x > cal(100.0))
{
printf("No solution!\n");
}
else
{
double low = 0 ,high = 100;
double mid = (low + high) / 2 ;
while(high - low > 1e-11)
{
mid = (high + low ) / 2 ;
double cc = cal(mid);
if(cc == x)
break;
if(cc < x)
low = mid ;
else high = mid ;
}
mid = (high + low) / 2 ;
printf("%.4f\n",mid);
}
}
}

double cal(double x)
{
double c = 8 * x * x * x * x + 7 * x * x * x + 2 * x * x + 3 * x + 6 ;
return c;
}
int main()
{
int T;
cin >> T;
while( T -- )
{
double x ;
cin >> x ;
if(x < cal(0.0) || x > cal(100.0))
{
printf("No solution!\n");
}
else
{
double low = 0 ,high = 100;
double mid = (low + high) / 2 ;
while(high - low > 1e-11)
{
mid = (high + low ) / 2 ;
double cc = cal(mid);
if(cc == x)
break;
if(cc < x)
low = mid ;
else high = mid ;
}
mid = (high + low) / 2 ;
printf("%.4f\n",mid);
}
}
}
1005 Selecting Problems

题意:就是给你一些人,每个人都能做一些题目,然后给出一个人数限制k,问至少有k个人都会做同样的题,问这个题数最大是多少。

思路:题目中给出的题目总数m <= 15,所以可以用二进制表示一个人会做那些题目。

可以先预处理出0 - 2^15 的题目作法 。

这里就发生了做这道题最悲剧的一件事,我直接把每道题扔进一个vector里,想也没想就开始二分了。

然后TLE。我就开始改二分的条件,想着估计是哪个状态没跳出,在mid 那里处理的不好。所以就开始了我的狂T之旅。

贴上vector的预处理。


[cpp]
for (int i = 0 ;i < 1<<15 ; i ++)
{
int num = i ;
int ans = 0 ;
while( num )
{
if(num & 1 ) ans ++;
num /= 2;
}
qq[ans].push_back(i);
}

for (int i = 0 ;i < 1<<15 ; i ++)
{
int num = i ;
int ans = 0 ;
while( num )
{
if(num & 1 ) ans ++;
num /= 2;
}
qq[ans].push_back(i);
}
好不容易想到把vector改成数组好了。


[cpp]
for (int i = 0 ; i < 1<<15 ; i ++)
{
int num = i ;
int ans = 0 ;
while( num )
{
if(num & 1 ) ans ++;
num /= 2;
}
qq[ans][f[ans] ++] = i ;
}

for (int i = 0 ; i < 1<<15 ; i ++)
{
int num = i ;
int ans = 0 ;
while( num )
{
if(num & 1 ) ans ++;
num /= 2;
}
qq[ans][f[ans] ++] = i ;
}
然而悲剧的事情还没结束。
因为还是T。。。然后我又陷入了狂改mid值的过程当中。。。期间T了无数次。
然后不知道啥想法,我就把交代码的语言改成GUN C ++ .(我这边一直默认是交Visual C++)。。

然后就A了。。。

A了。。。

了。。。

PS:亲测换了语言后如果用vector也是T 。今天你被坑了吗?


[cpp]
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define PI acos(-1.0)
#define Max 2005
#define inf 1<<28
#define LL(x) (x<<1)
#define RR(x) (x<<1|1)
#define FOR(i,s,t) for(int i=(s);i<=(t);++i)
#define ll long long
#define mem(a,b) memset(a,b,sizeof(a))
#define mp(a,b) make_pair(a,b)
using namespace std;

string st;
int q[1005];
int n , m , k, ans ;
bool vis[1005];
int qq[20][1<<16];
char ddd[25];
int f[20];
int main()
{
//mem(f,0);
//mem(qq,0);
for (int i = 0 ; i <= 1<<15 ; i ++)
{
int num = i ;
int ans = 0 ;
while( num )
{
if(num & 1 ) ans ++;
num /= 2;
}
qq[ans][f[ans] ++] = i ;
}
while(scanf("%d%d%d",&n,&m,&k) != EOF)
{
mem(q,0);
ans=0;
for (int i = 0 ; i < n ; i ++)
{
int a ;
scan