蓝桥训练第二周

1 ,泛凯撒加密

内存限制:128 MB时间限制:1.000 S

题目描述

众所周知,在网络安全中分为明文和密文,凯撒加密是将一篇明文中所有的英文字母都向后移动三位(Z的下一位是A),比如a向后移动三位就变成了d,A向后移动三位就变成了D,Z向后移动三位就变成了C,但是泛凯撒加密可没有这么简单,它是将明文中的每个字母向后移动k位得到密文,并且在密文的结尾会附加一个?,本题想让你通过得到密文反解出原本的明文。

输入

第一行一个正整数k表示字母向后移动的位数
接下来输入一个字符串,表示密文,输入保证仅密文的最后一个字符是?
密文的长度不为0,且不超过1000
0<=k<=100

输出

输出原本的明文

样例输入 复制

2
*eee/peee++?

样例输出 复制

*ccc/nccc++

提示

每个密文可能不止一行

这道题注意回车符的读入

#include <bits/stdc++.h>
using namespace std;
int main(){
	int k;
	char a;
	cin>>k;
	string s;
	getchar();//将缓冲区的回车符读入 
	while(a=getchar(),a!='?'){
	if(a>='A'&&a<='Z'){
	a-='A';
	a=(a-k%26+26)%26;//把26个字母看成一个圆环 
	a+='A';
	}
	if(a>='a'&&a<='z'){
	a-='a';
	a=(a-k%26+26)%26;
	a+='a';
	}
	s+=a;//
	}
	cout<<s;
	return 0;
}

2,ABC的整除问题

内存限制:128 MB时间限制:1.000 S

题目描述

给定三个非负整数 A,B,C,且保证A≤ B,C≠ 0,求在区间 [A, B] 中,存在多少个整数可以被C整除?

输入

第一行,一个整数 T,代表 T个测试样例。
接下来 T行,每行给出三个非负整数 A,B,C。

输出

共 T行,每行输出一个整数,代表在区间 [A, B] 中可以被C整除的数的数量。

1≤A≤B≤1e18,1≤C≤1e18

样例输入 复制

2
4 8 2
3 100 4

样例输出 复制

3
25

 这道题考察递推思想,需要找出规律

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll T;
int main(){
	cin>>T;
	while(T--){
	ll ans=0,num=0, A,B,C;
	scanf("%lld%lld%lld",&A,&B,&C);
	ans=B/C-(A-1)/C;
	printf("%lld\n",ans);
	}
	return 0;
}

13, 张毅的生财之道

内存限制:128 MB时间限制:1.000 S

题目描述

张毅想要傍富婆捞钱,已知有n个富婆,这n个富婆的财富依次给出
富婆顺序不能够被改变,张毅有着同时傍连续m个富婆的能力,求取其能从富婆们捞钱的最大值,最小值和二者之差

输入

一个正整数n
然后输入这n个富婆的财富
(1 <= n <= 1000000)
(1 <= m <= 100000)

输出

张毅能捞到的最多的钱、最少的钱和二者之差(之间用空格隔开)

样例输入 复制

8 2
3 1 6 2 1 5 9 1

样例输出 复制

14 3 11

 这道题考察哟一维前缀和

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e6+10;
ll a[N]={0},b[N]={0};
ll n,m,l,r;
int main(){
	scanf("%lld %lld",&n,&m);
	for(ll i=1;i<=n;i++){
		scanf("%lld",&a[i]);
		b[i]=b[i-1]+a[i];
	}
	ll ans=0,num=1e9,sum=0;
	for(ll i=1;i<=n-m+1;i++){
		r=i+m-1;
		sum=max(sum,b[r]-b[i-1]);
		num=min(num,b[r]-b[i-1]);//注意利用函数求最小值是一定要把num设为最大, 
	}
	ans=sum-num;
	printf("%lld %lld %lld",sum,num,ans); 
	return 0;
} 

4,这个题只能交一次

内存限制:128 MB时间限制:1.000 S

题目描述

学校有一小黑子社团,N+1名成员。
每个成员的小黑子值以A[0],A[1]……A[N]表示。(0≤A[i]≤N)
kun社团的机器可以改变连续多个成员的小黑子值,并将其加上一个数Z(Z可以是负数)
小黑子社团打算使用这个机器K次,每次把第X到第Y号(1≤X≤Y≤1e6)的成员都加上Z点小黑子值。
而社团的黑值B,是这么算的:
一开始B=0,然后第1到第N号成员,
·当A[i-1]<A[i]:B=B - S*|A[i-1]-A[i] |
·当A[i-1]>A[i]:B=B +T*|A[i-1]-A[i] |
其中S和T是组委会给我们的常数。kun作为头目永远作为队伍的排头,小黑子值永远为0,即A[0]永远为0。
你能帮kun算算每次使用过机器后成员的黑值是多少吗

输入

第一行4个整数,N,K,S,T,各个变量在描述中已经解释
接下来N+1行,每行一个数整数A[i],其中A[0]等于0
接下来K行,每行三个整数,X,Y,Z各个变量在描述中已经解释 

输出

K行,每行一个整数代表答案。
对于80%的数据  N,K≤2000;
对于100%的数据N,K≤200000;1≤ S , T,A[i]≤1e6 ; |Z|≤1e6;

样例输入 复制

4 3 2 3
0
5
2
4
6
1 2 1
3 4 -3
1 4 2

样例输出 复制

-9
-1
-5

提示

样例解释
第一次变化后
A: 0 6 3 4 6
B=0-12+9-2-4

还没想到好的方法,回来写题解

1428: 十三号星期五

内存限制:128 MB时间限制:1.000 S
评测

题目

十三号星期五真的很不常见吗?

每个月的十三号是星期五的频率是否比一周中的其他几天低?

请编写一个程序,计算N年内每个月的13号是星期日,星期一,星期二,星期三,星期四,星期五和星期六的频率。

测试的时间段将会开始于1900年1月1日,结束于1900+N−1年12月31日。

一些有助于你解题的额外信息:

(1) 1900年1月1日是星期一

(2) 在一年中,4月、6 月、9 月、11 月每个月 30 天,2月平年28天,闰年29天,其他月份每个月31天

(3) 公历年份是4的倍数且不是100的倍数的年份为闰年,例如1992年是闰年,1990年不是闰年

公历年份是整百数并且是400的倍数的也是闰年,例如1700年,1800年,1900年,2100年不是闰年,2000年是闰年

输入

共一行,包含一个正整数N
1≤N≤100

输出

共一行,包含七个整数,整数之间用一个空格隔开,依次表示星期六,星期日,星期一,星期二,星期三,星期四,星期五在十三号出现的次数。

样例输入 

28

样例输出 复制

49 48 47 49 48 48 47 
#include <bits/stdc++.h>
using namespace std;
int d[25]={0,13,18,13,15,13,18,13,17,13,18,13,17,13,18,13,18,13,17,13,18,13,17,13,18};//ba'mei'yi 
int d1[25]={0,13,18,13,16,13,18,13,17,13,18,13,17,13,18,13,18,13,17,13,18,13,17,13,18};
int z[7];
int r(int n){
	if(n%400==0||n%4==0&&n%100!=0)
	return 1;
	else
	return 0;
}
int main(){
	int N,y,day=0;
	cin>>N;
	for(int i=1;i<=N;i++){
		y=i-1+1900;
		if(r(y)==0)
		for(int j=1;j<25;j++){
			day+=d[j];
			z[day%7]++;
			day+=d[j+1];
			j++; 
		}
	else{
			for(int j=1;j<25;j++){
			day+=d1[j];
			z[day%7]++;
			day+=d1[j+1]; 
			j++;
		}					
	}
}
    cout<<z[6]<<" "<<z[0]<<" "; 
	for(int i=1;i<=5;i++)
	cout<<z[i]<<" ";
	return 0;
}

 1,把闰年和不是闰年的每个月的13分离出来

2,用一个数组统计星期几出现的次数

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

算法第一深情

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值