Codeforces Beta Round #83 DIV2

这一晚上。。。板子硬了点,睡的不太舒服,等会儿回宿舍补一觉~

在ID之间纠结了一阵子后,偶还是决定沿用Moon_1st这个ID,偶滴品牌不能丢了~ ^_^。

A:单纯模拟的~

B:刚开始想麻烦了,直观的想法是先排一下序,然后比较所有相邻且不同的数对,如果a(i+1)<=2*ai,那么必然输出Yes,由于(2^ai-1)^2 = 2^(2*ai)-2^(ai+1)+1,偶一直在考虑2^(ai+1)是否会对结果产生不利影响,不大容易看~但是从小case逐步增加的具体过程发现,除了ai==1的请况有影响外,其他的影响会随着ai的增大逐步递减,也就是没有影响。所以排序后直接判断相邻且不相等的数对就可以了。

C:一开始还兴冲冲地以为自己终于在正式比赛里碰到个网络流,没想到越看越不对劲,到最后正式确认是个水题~~不过孤立节点的trick需要注意一下,偶就改了一次,还好没被人cha到~

D:这个偶就木有什么发言权了,ff很快就秒掉了额。。。。偶还在纠结怎么写。。。直观的想法是sigma(C(sh-1, i)*C(sum-a[h], n-i-1)/C(sum-1,n-1)) (i=1,2,3,......,n-1)。偶还在想难道让偶用java BigDecimal么??不太确信用C++怎么写,先看得第五题,结果还是不会啊~看完后lock了一下代码,发现某些人C题有trick,然后就开始找人cha(貌似应该说hack)。。。。越hack越起劲啦,哈哈,头一次在cf里hack,四次都命中啦~也没再干别的。赛后听方方说你边乘边除不就算出结果来了么,偶想了想也是啊~,以前自己不是经常这么干么,怎么比赛的时候忘了。。。太菜鸟~

另外,此题方方有更简洁的解法,计算补集,结果p=1-(C(sum-a[h],n-1)/C(sum,n-1)) ~~好像是这么写吧~~~ orz~~~

E:再研究一下吧~~有点想法,但怕误导他人还是别说了~~

 

总结了一下,怎么和上次一样又是3个啊,下次继续吧~~还好靠C的一个trick赚了400pt的外快~~偶们房一衰貌似挂了一次,但是应是靠各种challenge排到了前头。。orz各种AC神,各种cha神~~orz ff~~去吃饭去咧~~

A:

View Code
#include <iostream>
#include
<cstdio>
#include
<ctime>
#include
<cmath>
#include
<cstring>
#include
<cstdlib>
#include
<string>
#include
<queue>
#include
<stack>
#include
<vector>
#include
<map>
#include
<set>
#include
<algorithm>
using namespace std;

#define MP(x, y) make_pair(x, y)
#define FOR(i, x, y) for((i) = (x); (i) <= (y); (i)++)

typedef
long long llg;

int main()
{
int a, b, ct, M = 24*60;
int x1, y1, x2, y2;
scanf(
"%d:%d", &a, &b);
ct
= a*60+b;
while(1)
{
ct
++;
ct
%= M;
a
= ct/60;
b
= ct%60;
x1
= a/10;
y1
= a%10;
x2
= b/10;
y2
= b%10;
if(x1==y2 && x2==y1)
{
printf(
"%d%d:%d%d\n", x1, y1, x2, y2);
break;
}
}
return 0;
}

B:

View Code
#include <iostream>
#include
<cstdio>
#include
<ctime>
#include
<cmath>
#include
<cstring>
#include
<cstdlib>
#include
<string>
#include
<queue>
#include
<stack>
#include
<vector>
#include
<map>
#include
<set>
#include
<algorithm>
using namespace std;

#define MP(x, y) make_pair(x, y)
#define FOR(i, x, y) for((i) = (x); (i) <= (y); (i)++)

typedef
long long llg;

const int N = 100010;

int n, a[N];

bool Yes(int a1, int a2)
{
if(a1 == 1) return false;
else
{
if(a2 >= 2*a1) return false;
else return true;
}
}

int main()
{
int i;
bool flag = false;
scanf(
"%d", &n);
for(i = 0; i < n; i++) scanf("%d", a+i);
sort(a, a
+n);
for(i = 0; i < n-1; i++)
if(a[i]!=a[i+1] && Yes(a[i], a[i+1]))
{
flag
= true;
break;
}
if(flag) printf("YES\n");
else printf("NO\n");
return 0;
}

  

C:

View Code
#include <iostream>
#include
<cstdio>
#include
<ctime>
#include
<cmath>
#include
<cstring>
#include
<cstdlib>
#include
<string>
#include
<queue>
#include
<stack>
#include
<vector>
#include
<map>
#include
<set>
#include
<algorithm>
using namespace std;

#define MP(x, y) make_pair(x, y)
#define FOR(i, x, y) for((i) = (x); (i) <= (y); (i)++)

typedef
long long llg;

const int N = 1010;
const int inf = 0x7fffffff;

int n, m, next[N], r[N], d[N];

struct node
{
int tank, tap, val;
};

vector
<node> g;

bool cmp(const node &a, const node &b)
{
return a.tank < b.tank;
}

void deal(int u)
{
int i, limit = inf;
node tmp;
if(next[u] == 0) return;
for(i = u; next[i] != 0; i = next[i])
limit
= min(limit, d[i]);
tmp.tank
= u;
tmp.tap
= i;
tmp.val
= limit;
g.push_back(tmp);
}

int main()
{
int i, a, b, c, len;
memset(next,
0, sizeof(next));
memset(r,
0, sizeof(r));
scanf(
"%d%d", &n, &m);
for(i = 0; i < m; i++)
{
scanf(
"%d%d%d", &a, &b, &c);
next[a]
= b;
r[b]
= a;
d[a]
= c;
}
g.clear();
for(i = 1; i <= n; i++)
if(r[i] == 0)
deal(i);
sort(g.begin(), g.end(), cmp);
len
= g.size();
printf(
"%d\n", len);
for(i = 0; i < len; i++)
printf(
"%d %d %d\n", g[i].tank, g[i].tap, g[i].val);
return 0;
}

  

补一下D的代码:

#include <iostream>
#include
<cstdio>
#include
<cstring>
using namespace std;

const int N = 1010;

int n, m, h, sum, s[N];
double ans, a[105], b[105];

int main()
{
int i;
scanf(
"%d%d%d", &n, &m, &h);
sum
= 0;
for(i = 1; i <= m; i++)
{
scanf(
"%d", s+i);
sum
+= s[i];
}
if(sum < n) printf("-1\n");
else
{
for(i = 1; i < n; i++)
{
a[i]
= (double)(sum-s[h]-i+1);
b[i]
= (double)(sum-i);
}
ans
= 1.0;
for(i = n-1; i > 0; i--) ans = ans*a[i]/b[i];
printf(
"%.8f\n", 1.0-ans);
}
return 0;
}

  

posted on 2011-08-24 21:23  Moon_1st  阅读(403)  评论(0编辑  收藏  举报

导航