59 条题解
-
1jxl123 LV 8 @ 2015-04-04 10:19:39
#include<iostream>
using namespace std;
int n,x,m,s=0;
int main(){
ios::sync_with_stdio(false);
cin>>n>>m;
x=m/2+m%2-1;
s=(n/m)*x+1+(m+1)%2;
if(n%m>x)n=x;
else n=n%m;
s=s+n;
cout<<s;
return 0;
} -
12009-11-09 11:23:26@
好好想想啊
“如果是偶数的话就取1~(m-2)div 2这个余数的n div m遍,再取一个m和m div 2,是奇数时取1~(m-1)div 2这个余数的n div m遍,再取一个m” -
12009-06-29 16:46:59@
其实主要就是知道策略,如果是偶数的话就取1~(m-2)div 2这个余数的n div m遍,再取一个m和m div 2,是奇数时取1~(m-1)div 2这个余数的n div m遍,再取一个m
-
12008-08-22 08:49:55@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms
一次AC~~~.
我是这样想的
既然2数之和不能被M整除
所以要看每个数除以M的余数
如果M是奇数
那么所有MOD M 不超过M DIV 2的数都是可取的(不包括MOD M =0);
但如果M为偶数
那就只能取MOD M 小于 M DIV 2的,余数恰好等与M DIV 2 的所有数中只能取一个;
还有 恰好是M的倍数的也只能取一个(也就是MOD=0的);
为什么自己想想;
//===========================================================
庆祝AC的100题 哦耶! -
02014-08-09 23:19:19@
var n,m:longint;
//
function min(a,b:longint):longint;
begin
if a<b then exit(a)
else exit(b);
end;
//
begin
assign(input,'p1383.in');assign(output,'p1383.out');
reset(input);rewrite(output);
read(n,m);
if m mod 2=1 then write((n div m)*(m div 2)+min(1,n div m)+min(n mod m,m div 2))
else write((n div m)*((m-1) div 2)+min(1,n div m)+min(n mod m,(m-1) div 2)+min((n+(m div 2)) div 2,1));
close(output);
end. -
02012-10-11 15:12:40@
var n,m,k,a,max:longint;
begin
readln(n,m); max:=0;
k:=n div m;
a:=n-k*m;
if m mod 2=0 then
begin
if a=1 then max:=(k+1)*a+2+(m div 2-1-a)*k
else max:=(k+1)*a
end
else begin if k>=1 then max:=(k+1)*(m div 2-1)+2
else max:=(k+1)*(m div 2 -1)
end
end
else begin
if a=1 then max:=(k+1)*a+1+k*((m-1) div 2-a)
else max:=(k+1)*a
end
else begin if k>=1 then max:=(k+1)*((m-1) div 2)+1
else max:=(k+1)*((m-1) div 2)
end
end;
if max>=2 then writeln(max) else writeln(0);
end. -
02009-10-30 17:17:08@
var n,m,k,a,max:longint;
begin
readln(n,m); max:=0;
k:=n div m;
a:=n-k*m;
if m mod 2=0 then
begin
if a=1 then max:=(k+1)*a+2+(m div 2-1-a)*k
else max:=(k+1)*a
end
else begin if k>=1 then max:=(k+1)*(m div 2-1)+2
else max:=(k+1)*(m div 2 -1)
end
end
else begin
if a=1 then max:=(k+1)*a+1+k*((m-1) div 2-a)
else max:=(k+1)*a
end
else begin if k>=1 then max:=(k+1)*((m-1) div 2)+1
else max:=(k+1)*((m-1) div 2)
end
end;
if max>=2 then writeln(max) else writeln(0);
end.写的比较ugly判断较多,刚开始输入 7 50 输出9 发现此时就跟本没有构成一个完整的行,而多加了mod 50 =0 与 25
在输入 4 5 输出 0 发现最后起初的判断是if max>2 改之 一次AC -
02009-10-08 14:00:14@
这是我原来的程序
Program Vijos_P1383;
Var n, m: Word;
Begin
Read(n, m);
Write(n Div m*((m-1) Shr 1)+Ord(n Mod m>=m Shr 1)*(m Shr 1)+Ord(n Mod m=m))+Ord(n>=m))
End.
60分 但是改成这样:
Program Vijos_P1383;
Var n, m: Word;
Begin
Read(n, m);
Write(n Div m*((m-1) Shr 1)+Ord(n Mod m>=m Shr 1)*(m Shr 1)+Ord(n Mod m=m))+1)
End.
就A了 但是如果输入4 5 应该输出2 但第二个程序(就是不考虑n -
02009-08-21 13:36:02@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms水题……不过3次才AC……
第一次漏了个+1
第二次掉了个not……
{---|---|---|---|---|---|---|---|---|---|---|---|---|--}var
n,m,x,y,z,ans:longint;
begin
readln(n,m);
x:=(m-1) div 2;
y:=n div m;
z:=n mod m;
ans:=x*y;
if z -
02009-08-20 19:52:58@
开始情况没考虑清楚
Program P1383;
var ans,z,n,k,t,g,p:longint;Begin
readln(n,k);
if k mod 2=0 then begin t:=k div 2-1; p:=(n div k)-1; end
else t:=k div 2;
g:=n-(n div k)*k;
if g>t then z:=g-t;
ans:=t*(n div k)+z+(n div k)-1+p;
writeln(n-ans);
end. -
02009-08-08 09:20:33@
program p1383;
var n,m,a,b,k,c:integer;
begin
readln(n,m);
b:=m div 2;
k:=n div m;
c:=0;
if n>=m then
begin
n:=n mod m;
for a:=1 to n do inc(c);
end
else
begin
k:=k+1;
c:=c-1;
end;
if c>b then
if m mod 2=1 then c:=b
else c:=b-1;
if m mod 2=1 then
write(c+k*b+1)
else write(c+k*(b-1)+2);
end.编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms -
02009-08-04 12:06:29@
var
n,m,tot,i,a,b:integer;
begin
readln(n,m);
tot:=1;
for i:=1 to (m-1) div 2 do
if n mod m>=i then tot:=tot+n div m+1
else tot:=tot+n div m;
if m mod 2=0 then tot:=tot+1;
writeln(tot);
end. -
02009-07-24 01:00:14@
k=trunc(m/2-0.00000001);
max=k* (n div m) +min(n mod m,k);
如果 m 可以取 inc(max);
如果 (m+0)/2 可以取 inc(max);得到max
-
02009-06-28 11:32:47@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms
怀疑数据。。。
还得问老师。。。
( ⊙ o ⊙ )啊! ╮(╯▽╰)╭ o(╯□╰)o -
02009-06-27 21:42:44@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms庆祝一下,本人的第200题,
-
02009-06-06 13:35:04@
#include
main()
{
int a,b,c,d,m,n;
scanf("%d%d",&n,&m);
a=m/2;
b=n/m;
c=n%m;
if(c>a)
{
d=a*b+a+1;
}
else
d=a*b+c+1;
printf("%d",d);
} -
02009-05-28 23:44:25@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
---|---|---|---|---|---|---|---|-Accepted 有效得分:100 有效耗时:0ms
3次AC,落一个等号,此程序为加长版:
下面附我#include "stdio.h"
int main()
{
int i,j,n,m,s,ok;
scanf("%d%d",&n,&m);
ok=1;
s=0;
if(m%2==0)
{
if(n>=m) s++;
for(i=1;i -
02009-03-24 21:38:25@
program P1383(input,output);
var
n,m,tot,i,a,b:integer;
begin
readln(n,m);
tot:=1;
for i:=1 to (m-1) div 2 do
if n mod m>=i then tot:=tot+n div m+1 else tot:=tot+n div m;
if m mod 2=0 then tot:=tot+1;
writeln(tot);
end.
我最近有干过什么-RP的事么...
提交了2次才过... -
02009-02-28 20:35:03@
我的程序貌似更直观
program p1383;
Var
n,m,i,j,total:longint;
dp:array[1..10000] of longint;
flag:boolean;
Begin
readln(n,m);
dp[1]:=1;
total:=1;
for i:=2 to n do
begin
flag:=true;
for j:=1 to total do
if (dp[j]+i) mod m=0 then
begin
flag:=false;
break;
end;
if flag then
begin
inc(total);
dp[total]:=i;
end;
end;
writeln(total);
End. -
02009-02-20 19:50:16@
program P1383;
var
n,m,max:longint;
function small(a,b:longint):longint;
begin
if a2*n-1 then writeln(n)
else begin
max:=((m-1) div 2)*(n div m)+small((m-1) div 2,n mod m);
if m mod 2=0 then inc(max);
if n>=m then inc(max);
writeln(max);
end;
end.