牛客小白月赛5(2018-07-22)

                                                                                                   异或(xor)

链接:https://www.nowcoder.com/acm/contest/135/G
来源:牛客网
 

时间限制:C/C++ 2秒,其他语言4秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld

题目描述

    从前,Apojacsleam家的水族箱里,养了一群热带鱼。

    在这几条热带鱼里,Apojacsleam特别喜欢一条叫做TbGx(请勿人肉)的热带鱼,所以每次都让她第一个吃食物。对于每一条鱼,Apojacsleam都有一个顺序,鱼会按照这个顺序排序,越靠前的地位越高。

   吃饱喝足是要睡觉的,这是人的刚需,也是鱼的刚需。

    如果TbGx吃了Apojacsleam的食物,她就会睡觉(睡觉时长远小于一天)。这时第二条鱼还是饥肠辘辘的,第二条鱼就可以吃掉TbGx,那么第二条鱼又会睡觉......

    注意:Apojacsleam养的鱼比Apojacsleam的智商高到不知道哪里去了,他们都是绝顶聪明的;而他们又是极其守规矩的,即他们不会多鱼分食一条鱼或者食物,只是按照顺序吃;当某一条鱼前面的鱼睡着以后,他可以选择不吃这条鱼,那么别的鱼(还活着的)也不会吃这条,即按照顺序的吃。

    一开始,水族箱里只有TbGx一条鱼(未成年),但是,一条鱼成长两天就会成年,成年后就可以繁殖(无性繁殖?别问我我不知道),一天能繁殖一个后代。小鱼也会吃鱼的偶!

   请问在前n天中,TbGx最多多少天可以吃饭?

    Apojacsleam不希望TbGx饿着,所以你必须在1s内回答。

输入描述:

输入数据有多组,每组一个正整数n,意义如“题目描述”

输出描述:

对于每组输入数据,一行输出:

即前n天中,最多有多少天TbGx可以吃饭。

 

示例1

输入

复制

6

输出

复制

4

说明

 

第1天,1条鱼,能吃;

第2天,1条鱼,能吃;

第3天,2条鱼,不能吃;

第4天,3条鱼,能吃;

第5天,5条鱼,能吃;

第6天,8条鱼,不能吃;。

思路:每次TbGx第一个吃,而且所有的鱼都是绝顶聪明的,会保证不被其他鱼吃掉,易得出斐波那契数列并且是奇数项才能吃,所以只需找斐波那契数列前有几个奇数即可。

代码:

#include<cstdio>
int main()
{
    long long a;
    while(~scanf("%lld",&a))
    printf("%lld\n",a/3*2+a%3);
}

                                                                                 F-圆(circle)

链接:https://www.nowcoder.com/acm/contest/135/F
来源:牛客网

圆(circle)

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld

题目描述

    签到题来了,送你们一个Python秒的题。

    Apojacsleam来到了OI大陆,经过了连年征战,成为了一方国王。

    Apojacsleam把他的王国命名为“Apo国”,Apo国的领土是一个标准的圆形

    Apojacsleam现在想封赏他的大臣,他在国境上建立了n个城市,要求他的大臣对这n个城市两两之间修建道路(道路是笔直的),把整个王国分成尽量多的区域,使得每一个大臣都有封土并且不会太大(以免谋反)。

    于是Apojacsleam找你求助,他告诉你他打算建多少个城市,而你的任务是告诉他最多可以分成多少个部分。

    说的太慢可是要被处死的,所以你必须要在1s之内回答。

输入描述:

输入数据有多组,每组一行,一个正整数n,意义如“题目描述”

输出描述:

对于每一组数据输出一行描述答案:

输出一个正整数k,表示最多分成k份。

 

示例1

输入

复制

2
3

输出

复制

2
4

说明

 

样例解释(样例1和样例2一起解释了):

示例2

输入

复制

4
5
6

输出

复制

8
16
31

说明

 

思路:找规律,找公式

代码:

#include<iostream>
using namespace std;
using ll=long long;
int main()
{
    ll n,res;
    while(cin>>n)
    {
        res=n*(n-1)/2+n*(n-1)*(n-2)*(n-3)/24+1;
        cout<<res<<endl;
    }
}

                                                                                          G-阶乘

链接:https://www.nowcoder.com/acm/contest/135/D
来源:牛客网

阶乘(factorial)

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld

题目描述

输入描述:

输入数据共一行,一个正整数n,意义如“问题描述”。

输出描述:

输出一行描述答案:

一个正整数k,表示S的末尾有k个0

 

示例1

输入

复制

10

输出

复制

7

说明

 

  鸣谢真·dalao Tyxao

思路:看代码注释

代码:

#include<stdio.h>
int main()
{
    long long n,m,k=0,sum=0;
    scanf("%lld",&n);
    long long  i;
    for(i=1;i<=n;i++){
        m=i;
        while(m%5==0){//偶数遇上5会产生0 
            k++;
            m/=5;
        }
        sum+=k;
    }
    printf("%lld",sum);
    return 0;
}
/*
1
1*2
1*2*3
1*2*3*4
1*2*3*4*5                 1
1*2*3*4*5*6               2
1*2*3*4*5*6*7             3
1*2*3*4*5*6*7*8           4
1*2*3*4*5*6*7*8*9         5
1*2*3*4*5*6*7*8*9*10      7
*/

 

                                                                                     H-最大公约数(lcm)

链接:https://www.nowcoder.com/acm/contest/135/H
来源:牛客网
 

最大公约数(lcm)

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld

题目描述

给定两个正整数a,b,求a,b的最小公倍数。(即[a,b])

输入描述:

两个整整数,a,b

输出描述:

一个正整数,表示[a,b]

 

示例1

输入

复制

12 24

输出

复制

24

示例2

输入

复制

8 12

输出

复制

24

说明

对于输入输出的所有数据,保证不超过unsigned long long(18446744073709551615)

代码:

#include<iostream>
#include<cstdio>
using namespace std;
typedef unsigned long long int LL;
LL func(LL a,LL b){
    LL z=b;
    while(a%b){
        z=a%b;
        a=b;
        b=z;
    }
    return z;
}
int main()
{
    LL a,b;
    scanf("%lld %lld",&a,&b);
    printf("%lld",a/func(a,b)*b);//第一次*b写在了分子上,所以错了,因为会溢出
}

                                                                                    G-异或(xor)

链接:https://www.nowcoder.com/acm/contest/135/G
来源:牛客网

时间限制:C/C++ 2秒,其他语言4秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld

题目描述

    从前,Apojacsleam家的水族箱里,养了一群热带鱼。

    在这几条热带鱼里,Apojacsleam特别喜欢一条叫做TbGx(请勿人肉)的热带鱼,所以每次都让她第一个吃食物。对于每一条鱼,Apojacsleam都有一个顺序,鱼会按照这个顺序排序,越靠前的地位越高。

   吃饱喝足是要睡觉的,这是人的刚需,也是鱼的刚需。

    如果TbGx吃了Apojacsleam的食物,她就会睡觉(睡觉时长远小于一天)。这时第二条鱼还是饥肠辘辘的,第二条鱼就可以吃掉TbGx,那么第二条鱼又会睡觉......

    注意:Apojacsleam养的鱼比Apojacsleam的智商高到不知道哪里去了,他们都是绝顶聪明的;而他们又是极其守规矩的,即他们不会多鱼分食一条鱼或者食物,只是按照顺序吃;当某一条鱼前面的鱼睡着以后,他可以选择不吃这条鱼,那么别的鱼(还活着的)也不会吃这条,即按照顺序的吃。

    一开始,水族箱里只有TbGx一条鱼(未成年),但是,一条鱼成长两天就会成年,成年后就可以繁殖(无性繁殖?别问我我不知道),一天能繁殖一个后代。小鱼也会吃鱼的偶!

   请问在前n天中,TbGx最多多少天可以吃饭?

    Apojacsleam不希望TbGx饿着,所以你必须在1s内回答。

输入描述:

输入数据有多组,每组一个正整数n,意义如“题目描述”

输出描述:

对于每组输入数据,一行输出:

即前n天中,最多有多少天TbGx可以吃饭。

 

示例1

输入

复制

6

输出

复制

4

说明

 

第1天,1条鱼,能吃;

第2天,1条鱼,能吃;

第3天,2条鱼,不能吃;

第4天,3条鱼,能吃;

第5天,5条鱼,能吃;

第6天,8条鱼,不能吃;。

思路:

代码:

 

                                                                                     I   区间 (interval)

链接:https://www.nowcoder.com/acm/contest/135/I
来源:牛客网

时间限制:C/C++ 2秒,其他语言4秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld

题目描述

    Apojacsleam喜欢数组。

    他现在有一个n个元素的数组a,而他要对a[L]-a[R]进行M次操作:

        操作一:将a[L]-a[R]内的元素都加上P

        操作二:将a[L]-a[R]内的元素都减去P

    最后询问a[l]-a[r]内的元素之和?

    请认真看题干及输入描述。

输入描述:

输入共M+3行:

第一行两个数,n,M,意义如“题目描述”

第二行n个数,描述数组。

第3-M+2行,共M行,每行四个数,q,L,R,P,若q为1则表示执行操作2,否则为执行操作1

第4行,两个正整数l,r

输出描述:

一个正整数,为a[l]-a[r]内的元素之和

 

示例1

输入

复制

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

输出

复制

23

说明

写个博客记录几种好的代码

1.0数据较小得情况下,而且是单样例得话直接暴力

#include<cstdio>
#include<iostream>
using namespace std;
long long a[1000001]={0},c[1000001]={0},n,m,l,r,p,q; 
int main()//思路和树状数组类似
{ 
    scanf("%lld%lld",&n,&m);
    for(int i=1;i<=n;i++) 
        scanf("%lld",&a[i]); 
    for(int i=1;i<=m;i++)
    {
	    scanf("%lld%lld%lld%lld",&q,&l,&r,&p);
        if(q==1) p=-p;
		c[l]+=p;
		c[r+1]-=p;
	} 
    for(int i=1;i<=n;i++){
		c[i]+=c[i-1];
		a[i]+=c[i]+a[i-1];
	}
    scanf("%lld%lld",&l,&r);
    for(int i=1;i<=5;i++){
    	cout<<"c["<<i<<"]="<<c[i]<<endl<<"a["<<i<<"]="<<a[i]<<endl;
	}
    printf("%lld\n",a[r]-a[l-1]); //累加上来的,所以需要减去
    return 0;
}

2.0树状数组,线段树.....

                                                                                                I-时间 time

链接:https://www.nowcoder.com/acm/contest/135/J
来源:牛客网
 

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld

题目描述

         Apojacsleam是一个喜欢特殊时刻的人。

        他定义了一个时刻,若电子表显示ab:ba(24小时制),则该时刻为“回文时刻”(可以有前导零)。例如00:00就是回文时刻。

        给定一个时刻,求此时刻的上一个和下一个回文时刻。

J题附加:00:00就是24:00,没有24:00这一时刻

J题附加:输入可能有前导0,输出不含前导0,例如10:1的意思是10:01,而10:10的输出为10:10 

输入描述:

两个正整数,用“:”隔开,表示小时和分钟,保证输入时间合法。

输出描述:

两行,两个时刻(不含前导0),用“:”隔开,表示上一个时刻和下一个时刻

 

示例1

输入

复制

09:33

输出

复制

5:50
10:1

示例2

输入

复制

23:32

输出

复制

22:22
0:0

思路:

代码:

#include<iostream>
using namespace std;
int main()
{
	int a,b,c1,c2,s1,s2;
	scanf("%d:%d",&a,&b);
	if((a%10*10+a/10)==b){
		if(a==0&&b==0){
			c1=23,s1=59;
			c2=0,s2=1;
		}
		else{
			c1=a,s1=b-1;
			c2=a,s2=b+1;
		}
    }
    else{
        c1=a,s1=b;
        c2=a,s2=b;   	
	}
	while((c1%10*10+c1/10)!=s1){
		if(s1==0){
			c1--,s1=59;
		}
		else if(s1!=0) s1--;
	}
	cout<<c1<<":"<<s1<<endl;
	while((c2%10*10+c2/10)!=s2){
	    if(c2==23&&s2==59){
	    	c2=0,s2=0;
		}
		else if(c2!=23&&s2==59){
			c2++,s2=0;
		}
		else{
			s2++; 
		}
	}
	cout<<c2<<":"<<s2; 
	return 0;
}
	 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值