1111我和程序有个约会

5604: Kannyi打印模板 分享至QQ空间

时间限制(普通/Java):1000MS/3000MS     内存限制:65536KByte
总提交: 143            测试通过:35

描述

 

Kannyi要去沈阳参加比赛,赛前要用5106的打印机打一份模板以便赛场上使用。

奈何机房打印机出了点问题,双面打印总是不能很好完成,打印机会打印出偶数面,但是中间会夹杂白纸类似的情况,按理说他只要把它再放进去就好了,但是现在他要手动打印避免错误。他选择分段进行打印,BobHuang说那让我用代码给你生成吧。请你写一份和BobHuang一样的代码。

比如这个份模板5页,偶数页已经打印并整理好了,他需要把这三页一起打印,输出1,3,5就好了。

 

 

输入

 

 

输入数据包含多个测试实例,每个测试实例占一行,为这份模板的页数n和分成的段k。

多组数据以n=0,k=0结束。

 

 

输出

 

 

每个样例输出第一行为Case x:

然后输出为k行,第i行为第i段当要打印的页数,相邻两页用","隔开。

 

样例输入

5 1
6 2
20 3
0 0

样例输出

Case 1:
1,3,5
Case 2:
1,3
5
Case 3:
1,3,5,7
9,11,13,15
17,19

这个其实就是循环模拟题,模拟出来一行需要打印的就好。

这里数据出了锅,卡了chengyu的做法,不好意思啊。

#include<stdio.h>
int main()
{
    int n,k,ca=0;
    while(scanf("%d%d",&n,&k),n||k)
    {
        int s=((n+1)/2+k-1)/k,f=0,i;
        printf("Case %d:\n",++ca);
        for(i=1; i<=n; i+=2)
        {
            if(f!=s-1&&i!=n&&i!=n-1)printf("%d,",i),f++;//不是最后一个数or不到换行
            else printf("%d\n",i),f=0;
        }
    }
    return 0;
}

这里还有一份验题组的代码

#include<stdio.h>
int main()
{
    int n,k,i,m=1,r,t,j;
    while(scanf("%d %d",&n,&k),n||k)
    {
        printf("Case %d:\n",m++);
        if(n%2==0)
        {
            r=n/2;
            n--;
        }
        else
            r=n/2+1;
        if(r%k==0)
            r=r/k;
        else
            r=r/k+1;
        j=0;
        for(i=1; i<=n; i+=2)
        {
            if(!j)
                printf("%d",i);
            else
                printf(",%d",i);
            j++;
            if(j==r)
            {
                printf("\n");
                j=0;
            }
        }
        if(j)
            printf("\n");
    }
    return 0;
}

5605: 祝crq生日快乐 分享至QQ空间

Time Limit(Common/Java):1000MS/3000MS     Memory Limit:65536KByte
Total Submit: 184            Accepted:164

Description

 

 

2008-2018 TOJ已经走过了10年,这10年的故事有些我们不能知道,有些在2018年校赛的演讲稿可以看到当你有改变世界能力时,请做一个良... 

不管你做不做ACM,每个计算机系同学都面临着一个问题,就是进行程序设计,从C语言到C++,再到C#、Java,再到汇编、PHP,你离不开的就是编程。crq对于程序设计的热爱,我认为是高过每一个人的。你对他反映TOJ的不仅限于题目问题,往往都会第一时间解答。C语言的入门也是一个十分头疼的问题,但是crq会带着大家一同走过那段艰难的行程。每年开学初他都会投入大量的经历到C语言的入门中去,很多同学都是他投入时间的受益者。甚至你可以和他聊些自己的私事,他也会帮你排忧解难满,着实一个热心肠。我相信除了我,不少同学也受益过,但是毫无疑问我们剥夺了他休息的时间,即使他帮助别人也获得了快乐。

在参加算法竞赛的时间里,我意识到了自己投入时间去学习才是最重要的,自己要踏踏实实的,一步一个脚印,往往才是学习最行之有效的方法。所以在这个投入和产出不一定成正比的竞赛中,兴趣是重要的。你可以很菜,但是你需要保持一颗永远向上的心。crq在这个竞赛中也投入了很多时间和精力,很多出色的毕业生都是玩这个的,和他悉心浇灌ACM这块土地是分不开的。

我们不需要歌功颂德,对于这些老师们来讲,他们最大的幸福就是看着我们在所学专业有所收获。以上也纯粹为学长的叨叨,也希望各位老师可以天天开心,各位同学可以快乐地度过自己的大学生活。

11月11日不仅是购物狂欢节,也是crq的生日,请为他送上生日祝福。

 

 

Input

 

 

本题没有输入。

 

 

Output

 

 

请输出"Happy Birthday!"(不包含引号)。

 

 

Sample Input

 

Sample Output

Happy Birthday!

真的是纯粹学长想说的话,输出就行啦,一起祝老师生日快乐

#include<stdio.h>
int main()
{
    printf("Happy Birthday!");
    return 0;
}

5606: taozi的小难题 分享至QQ空间

Time Limit(Common/Java):500MS/1500MS     Memory Limit:65536KByte
Total Submit: 164            Accepted:18

Description

 

 

从前有一个抠门的国王taozi,一天他的领土受到了其它国家的侵略,于是taozi决定组建一个骑士团击退敌人。当然招募骑士也是需要花费金币的,这里就以骑士的攻击力来给金币,抠门的taozi看到了这么多骑士前来,很头痛,于是taozi找到了聪明的你,让你去帮他解决这个问题。

 

 

Input

 

 

输入多组数据,对于每组数据,第一行输入一个n,m,分别代表n个敌人和m个骑士,接下来n个数代表敌人的攻击力a,然后m个数代表雇佣骑士的攻击力b,多组数据以n=0,m=0结束。
数据规定

1≤n,m≤10000

1≤a,b≤100

 

 

Output

 

 

对于每组数据,输出国王最少需要花费多少金币雇佣骑士才能杀死所有敌人,如果不行输出-1。

 

 

Sample Input

2 3
5 4
7 8 4
2 1
5 5
10
0 0

Sample Output

11
-1

Hint

第一组数据,taozi选择第3号骑士打败2号敌人,选择第1号骑士打败1号敌人,总共花费11元。

第二组数据,taozi无论怎么选都打不过敌人。

这个题目本来是sort,但是

 因为攻击力最多100 ,所以开始开两个100的数组 ,然后100^2完事 
#include<stdio.h>

int main()
{
    int i,j,k,n,m,x;
    while(scanf("%d%d",&n,&m)!=EOF,n||m)
    {
        int a[105]={0},b[105]={0};
        for(i=0;i<n;i++)
        {
            scanf("%d",&x);
            a[x]++;
        }
        for(i=0;i<m;i++)
        {
            scanf("%d",&x);
            b[x]++;
        }
        int sum=0,f=1;
        for(i=1;i<=100;i++)
        {
            for(j=1;j<=a[i];j++)
            {
                f=0;
                for(k=i;k<=100;k++)
                {
                    if(b[k]>0)
                    {
                        b[k]--;
                        sum+=k;
                        f=1;
                        break;
                    }
                }
                if(f==0)break;
            }
            if(f==0)break;
        }
        if(f==0)printf("-1\n");
        else printf("%d\n",sum);
    }
    return 0;
}

 

5607: taozi的签到题 分享至QQ空间

Time Limit(Common/Java):1000MS/3000MS     Memory Limit:65536KByte
Total Submit: 637            Accepted:75

Description

 

 

题目很简单,就是求1到n中能被2或3或6或8整除的数有几个。

 

 

Input

 

 

多组输入,每行输入一个正整数n(n<=1000000),以n为0结束(组数在10000左右)。

 

 

Output

 

 

输出1到n中能被2或3或6或8整除的数的个数。

 

 

Sample Input

10
0

Sample Output

7

查询比较多,所以大家疯狂wa

我们可以理智分析下,是8的倍数一定是2的倍数,6的倍数一定是2和3的倍数

所以所求就是2的倍数个数-3的倍数个数+6的倍数个数

#include<stdio.h>
int main()
{
    int n;
    while(scanf("%d",&n),n)printf("%d\n",n/2+n/3-n/6);
    return 0;
}

或者预处理,预处理就是提前处理出答案,下一次还在上一次的基础上进行判断

#include <stdio.h>
#define N 1000005
int a[N];
int main()
{
    int n,i;
    for(i=1;i<N;i++)
    {
        a[i]=a[i-1];
        if(i%2==0||i%3==0||i%6==0||i%8==0) a[i]++;
    }
    while(scanf("%d",&n),n)printf("%d\n",a[n]);
    return 0;
}

5608: 单身狗沙漠逃生 分享至QQ空间

Time Limit(Common/Java):1000MS/3000MS     Memory Limit:65536KByte
Total Submit: 20            Accepted:5

Description

 

 

1111是个有趣的节日,某单身狗没钱可花,没事可做。

1541401467161087125.png

沙漠里有一条很长的公路,单身狗想沿着公路进沙漠去探险。每走x公里路后,单身狗就要消耗x份食物(x为大于0的分数)。单身狗共准备了n份食物,但他身上最多背负m份食物(n%m为0,而且n/m<11)。如果食物可以在路边存放,为保证能原路返回出发点,单身狗最远能进入沙漠多少公里?

 

 

Input

 

 

输入数据包含多个测试实例,每个测试实例占一行,为这份食物份数n和最多背负的食物数m。(n<1111)

多组数据以n=0,m=0结束。

 

 

Output

 

 

每组数据输出一行,代表单身最多进入沙漠的总公里数,为一最简分数,即分子和分母互质。

 

 

Sample Input

600 120
1 1
0 0

Sample Output

137/1
1/2

Hint

 

这是一个极端构造的问题,我们可以尝试去构造极端条件并求解。

由于单身狗每次只能背负120份食物,故他要从出发点出发5次。
每次出发走一段距离后,就将食物放在路边做补充,然后返回出发点背负食物。 

但是这个距离要走几次是固定的,比如第一段路就要走10 次,第二段路要走8次,第三段路要走6次,第四段路要走4次,第五次路要走2次。但是每段路的消耗的食物数和是固定的,均为120份。

所以距离为120/10+120/8+120/6+120/4+120/2=137。

所以题目变为了分数加法(雾)?好人做到底,偷偷告诉你,1~10的最小公倍数为2520。

这个题目害怕大家想不到做法,所以提示里题解了一波。

其实就是第一段路要走2*(n/k)次,消耗k份食物...最后一段路走2次,消耗k份食物。

合并同类项借助2050的做法

#include<stdio.h>
int gcd(int a,int b)
{
    return b==0?a:gcd(b,a%b);
}
int main()
{
    int n,k;
    while(scanf("%d%d",&n,&k),n||k)
    {
        int a=0,b=2*2520,i;
        for(i=1;i<=n/k;i++)a+=k*2520/i;
        int t=gcd(a,b);
        printf("%d/%d\n",a/t,b/t);
    }
}

分数加法的做法

#include<stdio.h>
int a,b;
int gcd(int a,int b)
{
    return b==0?a:gcd(b,a%b);
}
int d()
{
    int t=gcd(a,b);
    a/=t,b/=t;
}
int main()
{
    int n,m,i;
    while(~scanf("%d%d",&n,&m),n,m)
    {
        a=m,b=2;
        for(i=2; i<=n/m; ++i)a=2*a*i+m*b,b*=2*i,d();
        printf("%d/%d\n",a,b);
    }
}

 

posted @ 2018-11-11 18:22  暴力都不会的蒟蒻  阅读(731)  评论(0编辑  收藏  举报