标题:关于第十八期比赛
只看楼主
crackerwang
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:833
专家分:0
注 册:2007-2-14
得分:0 
你那64位到底怎么用??

2007-09-16 13:20
雨中飞燕
Rank: 3Rank: 3
等 级:禁止访问
威 望:8
帖 子:2200
专家分:0
注 册:2007-8-9
得分:0 
我都说了两种都可以啦



by 雨中飞燕 QQ:78803110 QQ讨论群:5305909

[url=http://bbs.bc-cn.net/viewthread.php?tid=163571]请大家不要用TC来学习C语言,点击此处查看原因[/url]
[url=http://bbs.bc-cn.net/viewthread.php?tid=162918]C++编写的Windows界面游戏[/url]
[url=http://yzfy.org/]C/C++算法习题(OnlineJudge):[/url] http://yzfy.org/
2007-09-16 13:24
雨中飞燕
Rank: 3Rank: 3
等 级:禁止访问
威 望:8
帖 子:2200
专家分:0
注 册:2007-8-9
得分:0 
#define PB_ID bccn18_3
#include<stdio.h>
typedef long long int64;
bool flag[50009];
int main()
{
int64 n,m,sum;
int i,j,k;
while(scanf("%lld%lld",&n,&m)!=EOF) //你看一下你的64位输入用的是%lld还是%I64d。可能要做一下改动
{
if(n==-1&&m==-1) break ;
for(i=1;i<=n;i++) flag[i]=0;
k=1;
for(i=1;i<n;i++)
{
sum=(n-i)*(n-i-1)/2;
if(sum>=m)
{
for(;flag[k];k++);
printf("%d ",k);
flag[k]=1;
}
else
{
m=m-sum;
for(j=k;j<=n;j++)
{
if(flag[j]==0) m--;
if(m==0) break;
}
for(j++;flag[j];j++);
printf("%d ",j);
flag[j]=1;
i++;
break;
}
}
if(i<n)
{
for(j=n;j>=1&&i<n;j--)
{
if(!flag[j])
{
printf("%d ",j);
flag[j]=1;
i++;
}
}
}
for(i=1;i<=n;i++)
{
if(!flag[i])
{
printf("%d\n",i);
break;
}
}
}
return 0;
}

第三题LZ提供的标程,错哪??



by 雨中飞燕 QQ:78803110 QQ讨论群:5305909

[url=http://bbs.bc-cn.net/viewthread.php?tid=163571]请大家不要用TC来学习C语言,点击此处查看原因[/url]
[url=http://bbs.bc-cn.net/viewthread.php?tid=162918]C++编写的Windows界面游戏[/url]
[url=http://yzfy.org/]C/C++算法习题(OnlineJudge):[/url] http://yzfy.org/
2007-09-16 13:28
crackerwang
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:833
专家分:0
注 册:2007-2-14
得分:0 
偶自己觉得错在这:
#define PB_ID bccn18_3
#include<stdio.h>
typedef long long int64;
bool flag[50009];
int main()
{
int64 n,m,sum;
int i,j,k;
while(scanf("%lld%lld",&n,&m)!=EOF)

2007-09-16 13:30
crackerwang
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:833
专家分:0
注 册:2007-2-14
得分:0 

发现世界杯,那个题目leeco写的比我好


2007-09-16 13:31
crackerwang
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:833
专家分:0
注 册:2007-2-14
得分:0 
我发现我第三题是个O(n)的.
里面的循环只循环一次就会跳出所以循环.最坏的情况是3*n

2007-09-16 13:35
HJin
Rank: 6Rank: 6
等 级:贵宾
威 望:27
帖 子:401
专家分:0
注 册:2007-6-9
得分:0 

for(;flag[k];k++);

you are searching the first k such that flag[k] is not set from
whatever a lower bound:

for(k=lower_bound; flag[k]; k++)

or more readable:

for(k=lower_boud; ; k++)
{
if(flag[k]==0)
{
break;
}

}

This lower_bound is indeterminate and it is possible you have to
search O(n) times here.

[此贴子已经被作者于2007-9-16 13:57:26编辑过]


I am working on a system which has no Chinese input. Please don\'t blame me for typing English.
2007-09-16 13:54
HJin
Rank: 6Rank: 6
等 级:贵宾
威 望:27
帖 子:401
专家分:0
注 册:2007-6-9
得分:0 
回复:(crackerwang)以下是引用HJin在2007-9-16 13:...
thanks, ACed at pku for 78ms.

I saw people got ACed for 0ms.

I am working on a system which has no Chinese input. Please don\'t blame me for typing English.
2007-09-16 14:25
crackerwang
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:833
专家分:0
注 册:2007-2-14
得分:0 
偶也只能到78

2007-09-16 14:30
crackerwang
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:833
专家分:0
注 册:2007-2-14
得分:0 

这个比我先前那个明显好很多.但是速度也就快10几.
#include<stdio.h>
int main()
{
unsigned long n,m,sum;
int i,j,k;
while(scanf("%u%u",&n,&m)!=EOF)
{
if(n==-1&&m==-1) break ;
k=1;
for(i=1;i<=n;i++)
{
sum=(n-i)*(n-i-1)/2;
if(sum>=m)
{
printf("%d ",i);
}
else
{
m=m-sum+i;
printf("%d ",m);
break;
}
}
for(j=n;j>=i;j--)
{
if(j==m) continue;
printf("%d ",j);
}
printf("\n");
}
return 0;
}



2007-09-16 15:01



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-170250-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.092986 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved