151 条题解
-
0魔杰座 LV 7 @ 2009-07-10 22:22:14
program p1302;
var
m,i,j,k,t,sum:longint;
a:array [1..10000,1..2] of longint;
begin
read(m);
k:=2*m;
t:=0;
for i:=1 to (m div 2) do
begin
for j:=2 to (m div 2) do
begin
sum:=2*i*j+j*(j-1);
if sum=k then begin
inc(t);
a[t,1]:=i;
a[t,2]:=i+j-1;
break end
else if sum>k then break;
end;
end;for i:=1 to t do
begin
write(a,' ',a);
writeln;
end;
end.恩,等差数列,2*a1*n+n(n-1)=2*m;
感觉还可以再优化,当数字很大时,应该可以j div 10;不过,只是感觉,还没证明。 -
02009-07-09 15:23:01@
不优化有可能会超时.
-
02009-06-07 00:43:01@
var n:extended;
a1,m:int64;
begin
{N+};
readln(m);
a1:=0;
repeat
begin
a1:=a1+1;
n:=(1-2*a1+sqrt((2*a1+1)*(2*a1+1)+8*m))/2;
if (n-trunc(n)=0) then begin
write(a1+1,' ',a1+trunc(n)-1);
writeln
end;
end;
until a1=trunc((m-1)/2);
end. -
02009-04-07 20:26:19@
program p1302;
var
n,i,j:longint;
begin
readln(n);
for i:=1 to n shr 1 do
begin
for j:=i+1 to n do
begin
if (i+j)*(j-i+1)=n*2
then begin
writeln(i,' ',j);
break;
end
else if (i+j)*(j-i+1)>n*2
then break;
end;
end;
end. -
02009-03-08 10:00:51@
数学题……高斯定律……
(l+r)*(r-l+1)=2*m
枚举(r-l+1)即可
令x-1=r-l
y=r+l
模拟方程组求解的过程就可以了……
{————————————————————————————}编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0msvar m,i,x,y,l,r,n:longint;
begin
read(m);
n:=m*2;
for i:=round(sqrt(n)) downto 2 do
if n mod i=0 then
begin
x:=i-1;
y:=n div i;
if (x>0) and (y>0) then
begin
r:=(x+y) div 2;
l:=(y-x) div 2;
if (l+r)*(r-l+1)=2*m then writeln(l,' ',r);
end;
end;
end.Flag
Accepted
题号
P1302
类型(?)
数论 / 数值
通过
2431人
提交
4768次
通过率
51%
难度
1提交 讨论 题解
-
02009-03-03 16:57:41@
program lianxuzhiranshuhe;
var m,i,j,k:longint;
begin
readln(m);
k:= trunc(m /2)+1;
for i:=1 to k do
for j:=i+1 to k+1 do
if (i+j)*(j-i+1)=m*2 then begin
writeln(i,' ',j);
break;
end
else if (i+j)*(j-i+1)>m*2 then break;
end.
直接枚举......AC....还0秒...... -
02009-02-19 12:45:11@
#include
int main (){
int m;
scanf ("%d",&m);
int i,j,s,t;
for (i=1;i -
02008-12-21 19:35:47@
program P1302(input,output);
var
l,r:real;
i:longint;
j,m,t:int64;
begin
readln(m);
m:=m*2;
t:=trunc(sqrt(m));
for i:=t downto 2 do
if m mod i=0 then
begin
j:=m div i;
r:=(i+j-1)/2;
l:=j-r;
if r=trunc(r) then
writeln(l:0:0,' ',r:0:0);
end;
end.水题...时间复杂度不高啊...
-
02008-12-20 18:42:43@
记录号 Flag 得分 记录信息 环境 评测机 程序提交时间
R1101025 Accepted 100 From zgx-
P1302 FPC Vivid Puppy 2008-12-20 18:39:45From cqwshll
连续自然数和编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms强搜,十六行秒杀。
而且全零秒^_^ -
02008-12-11 13:34:52@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0msprogram p1302;
var
n,i,j:longint;
begin
readln(n);
for i:=1 to n shr 1 do
begin
for j:=i+1 to n do
begin
if (i+j)*(j-i+1)=n*2
then begin
writeln(i,' ',j);
break;
end
else if (i+j)*(j-i+1)>n*2
then break;
end;
end;
end. -
02008-12-03 21:43:08@
Accepted 有效得分:100 有效耗时:0ms
我也不知道复杂度是几……感觉很慢,但编译时2000000貌似可以在1秒内……
program p1302;
var
i,j,n:longint;
begin
readln(n);
for i:=1 to n shr 1 do
begin
for j:=i+1 to n do
if (i+j)*(j-i+1)=2*n then
begin
writeln(i,' ',j);
break;
end else
if (i+j)*(j-i+1)>2*n then break;
end;
end. -
02008-11-11 10:26:50@
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms -
02008-11-10 15:48:22@
时间复杂度为log2(N),最好的答案
#include
main()
{
long sum,n=0;
scanf("%ld",∑);
while((1+n*n)/2=2;n--)
{
if((2*sum-n*n-n)%(2*n)==0)printf("%d %d\n\n",(2*sum+1-n*n)/(2*n)+1,((2*sum+1-n*n)/(2*n))+n);
}
} -
02008-11-04 08:01:03@
#include
long m;
int main()
{
long a,b,up,here;
scanf("%ld",&m);
up=m/2;
for(a=1;a -
02008-11-03 23:29:39@
var n:longint;
a,b: integer;
k,j,o:longint;
begin
readln(n);
for a:=1 to round(n/2) do
for b:=a to round(n/2) do
begin
if (a+b)/2*(b-a+1)=n then
writeln(a,' ',b);
end;
end.
就是有点慢 -
02008-11-02 14:55:01@
for (i=1;i
-
02008-10-31 19:58:23@
Program P1302;
Var M,i,p:longint;k:real;
Ans1:array [1..100000] of longint;
Ans2:array [1..100000] of longint;
begin
readln(m);
p:=0;for i:=2 to m do begin
k:=(m-(i*(i-1))/2)/i;
if k -
02008-10-29 09:10:11@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
---|---|---|---|---|---|---|---|-
公差为1的等差数列~ -
02008-10-20 20:47:29@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms -
02008-10-18 01:50:21@
枚举可以过????我只有60分~~~~
后来换贪心~~~AC~~~~
#include
#include
#includeint main(int argc, char *argv[])
{
long long M;
long long i,j;
long long temp1,temp3;
double temp2;
static long long record[10000][4];
long long re=0;
scanf("%I64d",&M);
for(i=0;i