View Full Version : giải được cho 10000VND
longni123456789
01-09-2009, 22:07
Cho 1 số nguyên dương N ko lớn hơn 10^9. Hãy biểu diễn N thành tổng các số nguyên dương khác nhau sao cho tích M của các số hạng là lớn nhất. Dữ liệu vào từ file 12.inp gồm các dòng ghi số N, dữ liệu ra ở file 12.out ghi số M ở dòng tương ứng.
Giải đi, giải được cho 10000VND, qua Mỹ nhận giải nha
Bài như này mà cho có mỗi thế thôi à? Nản quá.
Nhận xét: Các số có tổng không đổi thì tích lớn nhất khi các số bằng nhau (Cái này hệ quả của Cauchy).
=> Tìm cách phân tích ra sao cho chênh lệch ít nhất.
Đơn giản! :D
- cái title hơi quá =.=! , xh h` cái j` cũng quy ra tiền nhỉ :))
- dùng pp rải đậu
const fi='12.inp';
fo='12.out';
max=100000000;
var f:text;
n,s,m:longint;
a:array[1..max] of longint;
procedure inp;
begin
assign(f,fi);
reset(f);
readln(f,n);
close(f);
end;
procedure test;
var i,t:longint;
begin
t:=0;
i:=0;
if n=1 then m:=1 else m:=2;
while t+m<=n do
begin
inc(i);
t:=t+m;
a[i]:=m;
inc(m);
end;
m:=i;
t:=n-t;
repeat
i:=m;
while (t>0) and (i>0) do
begin
a[i]:=a[i]+1;
dec(t);
dec(i);
end;
until t<=0;
end;
procedure pri;
var i:longint;
begin
assign(f,fo);
rewrite(f);
writeln(f,m);
for i:=1 to m do
writeln(f,a[i]);
close(f);
end;
begin
inp;
test;
pri;
end.
mr_invincible
02-09-2009, 21:55
Bài như này mà cho có mỗi thế thôi à? Nản quá.
Nhận xét: Các số có tổng không đổi thì tích lớn nhất khi các số bằng nhau (Cái này hệ quả của Cauchy).
=> Tìm cách phân tích ra sao cho chênh lệch ít nhất.
Đơn giản! :D
vấn đề: phân tích ra bao nhiêu số?
Nếu mình nhớ ko nhầm thì ngoài vài giá trị N đủ nhỏ để làm tay, còn lại phân tích ra thành toàn 2 với 1 hoặc 0 số 3 thì phải
p.s. 10K thì hơi ít =((
@RR: Phân tích ra thành tổng, thế nên cứ tương 2 vào thôi.
N chẵn hoặc lẻ thì cũng thế này.
Đáp án:
M = 2^(n div 2).
Chuẩn rồi.
:D
mr_invincible
04-09-2009, 00:52
:| N lẻ: 2^(n div 2 - 1)*3 (> 2^(n div 2) )
Chứng minh?...
Uhm.
Em ko nghĩ kĩ.
Chắc N lẻ thì
đặt T = (n div 2)^2
và M = T * (N-2*T)
Phần N-2*T tiếp tục thực hiện như trên đến khi còn là 1.
P/S: Dạo này anh Trung rảnh rỗi được sang đây à?
VNOI ko có việc gì làm ???? :D
giúp mình giải bt này với
đề bài này
Nhập vào ngày tháng năm. xac định vào thứ nào trong tuần biết công thức xác định thứ như sau
thứ = (ngày+tháng*2+(tháng+1)*3Div5+nămDiv4+5)Mod7
nếu tháng nhỏ hơn 3thif
tháng:=tháng+12
năm:=năm+1
có công thức thì cứ việc thay vào thôi
Uses CRT;
Var
day,month,year:longint;
Function thu(d,m,y:integer):integer;
Var
century,yr,dw:integer;
Begin
if m<3 then
begin
m:=m+10;
y:=y-1;
end
else
m:=m-2;
century:=y div 100;
yr:=y mod 100;
dw:=(((26 * m - 2) div 10) + d + yr + (yr div 4) +
(century div 4) - ( 2 * century)) mod 7;
if dw < 0 then
thu:=dw + 7
else
thu:=dw;
End;
BEGIN
Clrscr;
Write('Nhap vao ngay '); readln(day);
Write('Nhap vao thang ');readln(month);
Write('Nhap vao nam ');readln(year);
Write('Day la thu : ');
Case thu(day,month,year) of
0: Writeln(' Chu Nhat');
1: Writeln(' Thu Hai');
2: Writeln(' Thu Ba');
3: Writeln(' Thu Tu');
4: Writeln(' Thu Nam');
5: Writeln(' Thu Sau');
6: Writeln(' Thu Bay');
End;
Readln;
end.
[=========> Bổ sung bài viết <=========]
mà thang : = thang + 10 chớ , 12 thì toi r` . 1 năm có 12 tháng àh :(
[=========> Bổ sung bài viết <=========]
nam = nam-1 chứ . Type công thức sai tùm lum :(
thử bỏ lệnh "Uses CRT;" và "Clrscr;" thử
lehuong109
06-09-2009, 22:40
Cho 1 số nguyên dương N ko lớn hơn 10^9. Hãy biểu diễn N thành tổng các số nguyên dương khác nhau sao cho tích M của các số hạng là lớn nhất. Dữ liệu vào từ file 12.inp gồm các dòng ghi số N, dữ liệu ra ở file 12.out ghi số M ở dòng tương ứng.
Giải đi, giải được cho 10000VND, qua Mỹ nhận giải nha
Sao lại có kẻ hách xì dầu như này trong diễn đàn zị ta?
cái này là do bạn type sai mà
chỉ có "thu:=dw+7" chứ làm j` có dấu ; nữa
duongdragonxxx
09-09-2009, 17:30
mịa, dốt hok jải dc cứ vào 4rum húng
duydragon
10-09-2009, 21:57
- cái title hơi quá =.=! , xh h` cái j` cũng quy ra tiền nhỉ :))
- dùng pp rải đậu
const fi='12.inp';
fo='12.out';
max=100000000;
var f:text;
n,s,m:longint;
a:array[1..max] of longint;
procedure inp;
begin
assign(f,fi);
reset(f);
readln(f,n);
close(f);
end;
procedure test;
var i,t:longint;
begin
t:=0;
i:=0;
if n=1 then m:=1 else m:=2;
while t+m<=n do
begin
inc(i);
t:=t+m;
a[i]:=m;
inc(m);
end;
m:=i;
t:=n-t;
repeat
i:=m;
while (t>0) and (i>0) do
begin
a[i]:=a[i]+1;
dec(t);
dec(i);
end;
until t<=0;
end;
procedure pri;
var i:longint;
begin
assign(f,fo);
rewrite(f);
writeln(f,m);
for i:=1 to m do
writeln(f,a[i]);
close(f);
end;
begin
inp;
test;
pri;
end.
Ông nội, cái này tới 10^4 là hết ke rồi, xài phương pháp xử lý số lớn đi.
Ông nội, cái này tới 10^4 là hết ke rồi, xài phương pháp xử lý số lớn đi.
- mình là girl
- mình đã test thử , chạy đc tới 10^9
- nếu bạn có code của bài này mà vik = pp xử lí số lớn thì post lên mình tham khảo vs . Thax
Sặc. Chả hiểu bạn thế nào nữa :|
Code của chị Hằng chuẩn rồi.
Sau 2 dòng đấy
if dw<0 then thu:=dw+7 else thu:=dw;
// Them dong nay la in ra con gi
Writeln('thu = ',thu);
Nản quá.
mình gán ùi in , bạn in trực típ . K bài nào sai cả :)
Powered by vBulletin® Version 4.2.0 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.