题解

59 条题解

  • 1
    @ 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;
    }

  • 1
    @ 2009-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”

  • 1
    @ 2009-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

  • 1
    @ 2008-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题 哦耶!

  • 0
    @ 2014-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.

  • 0
    @ 2012-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.

  • 0
    @ 2009-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

  • 0
    @ 2009-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

  • 0
    @ 2009-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

  • 0
    @ 2009-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.

  • 0
    @ 2009-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

  • 0
    @ 2009-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.

  • 0
    @ 2009-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

  • 0
    @ 2009-06-28 11:32:47

    编译通过...

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案正确... 0ms

    ---|---|---|---|---|---|---|---|-

    Accepted 有效得分:100 有效耗时:0ms

    怀疑数据。。。

    还得问老师。。。

    ( ⊙ o ⊙ )啊! ╮(╯▽╰)╭ o(╯□╰)o

  • 0
    @ 2009-06-27 21:42:44

    编译通过...

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案正确... 0ms

    ---|---|---|---|---|---|---|---|-

    Accepted 有效得分:100 有效耗时:0ms

    庆祝一下,本人的第200题,

  • 0
    @ 2009-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);

    }

  • 0
    @ 2009-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

  • 0
    @ 2009-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次才过...

  • 0
    @ 2009-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.

  • 0
    @ 2009-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.

信息

ID
1383
难度
4
分类
数论 点击显示
标签
递交数
1109
已通过
503
通过率
45%
被复制
3
上传者