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: 十三号星期五
题目
十三号星期五真的很不常见吗?
每个月的十三号是星期五的频率是否比一周中的其他几天低?
请编写一个程序,计算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年是闰年
输入
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,用一个数组统计星期几出现的次数