一、刷题统计
1、题目:
小明决定从下周一开始努力刷题准备蓝桥杯竞赛。他计划周一至周五每天做 a 道题目,周六和周日每天 b 道题目。请你帮小明计算,按照计划他将在第几天实现做题数大于等于 n 题?
【输入格式】输入一行包含三个整数 a , b 和 n .
【输出格式】输出一个整数代表天数。
2、代码:
#include <iostream>
using namespace std;
signed main()
{
int a,b,n;
cin>>a>>b>>n;
int count=0;
int e=n/(5*a+2*b);
int f=n%(5*a+2*b);
if(f<=a){
count=7*e+1;
}
else if(f>a&&f<=2*a){
count=7*a+2;
}
else if(f>2*a&&f<=3*a){
count=7*e+3;
}
else if(f>3*a&&f<=4*a){
count=7*e+4;
}
else if(f>4*a&&f<=5*a){
count=7*e+5;
}
else if(f>5*a&&f<=(5*a+b)){
count=7*e+6;
}
else if(f>(5*a+b)&&f<(5*a+2*b)){
count=8*e;
}
cout<<count;
return 0;
}
二、修剪灌木
1、题目:
爱丽丝要完成一项修剪灌木的工作。
有 N 棵灌木整齐的从左到右排成一排。爱丽丝在每天傍晚会修剪一棵灌木,让灌木的高度变为0厘米。爱丽丝修剪灌木的顺序是从最左侧的灌木开始,每天向右修剪一棵灌木。当修剪了最右侧的灌木后,她会调转方向,下一天开始向左修剪灌木。直到修剪了最左的灌木后再次调转方向。然后如此循环往复。灌木每天从早上到傍晚会长高1厘米,而其余时间不会长高。在第一天的早晨,所有灌木的高度都是0厘米。爱丽丝想知道每棵灌木最高长到多高。
【输入格式】一个正整数 N ,含义如题面所述。
【输出格式】输出 N 行,每行一个整数,第行表示从左到右第 i 棵树最高能长到多高。
2、代码:
#include <iostream>
using namespace std;
signed main()
{
int n;
cin>>n;
int a[1005];
if(n==1){
cout<<1;
return 0;
}
int height=(n-1)*2;
int left=1;
int right=n;
while(left<right){
a[left]=a[right]=height;
left++;
right--;
height-=2;
}
for(int i=1;i<n;i++){
cout<<a[i]<<endl;
}
return 0;
}
三、X进制减法
1、题目:
x 进制减法
进制规定了数字在数位上逢几进一。
X 进制是一种很神奇的进制,因为其每一数位的进制并不固定!例如说某种 X 进制数,最低数位为二进制,第二数位为十进制,第三数位为八进制,则 X 进制数321转换为十进制数为65。
现在有两个 X 进制表示的整数 A 和 B ,但是其具体每一数位的进制还不确定,只知道 A 和 B 是同一进制规则,且每一数位最高为 N 进制,最低为二进制。请你算出 A - B 的结果最小可能是多少。
请注意,你需要保证 A 和 B 在 X 进制下都是合法的,即每一数位上的数字要小于其进制。
输入格式
第一行一个正整数 N ,含义如题面所述。
第二行一个正整数 MQ ,表示 X 进制数 A 的位数。
第三行 Mq 个用空格分开的整数,表示 X 进制数 A 按从高位到低位顺序各个数位上的数字在十进制下的表示。
第四行一个正整数 Mb ,表示 X 进制数 B 的位数。
第五行 Mb 个用空格分开的整数,表示 X 进制数 B 按从高位到低位顺序各个数位上的数字在十进制下的表示。
请注意,输中的所有数字都是十进制的。
2、代码
#include <iostream>
#define MOD 100000007;
using namespace std;
const int N=1e5+5;
int numsA[N],numsB[N];
int main()
{
int maxN,n,m;
cin>>maxN>>n;
for(int i=n-1;i>=0;i--){
cin>>numsA[i];
}
cin>>m;
for(int j=m-1;j>=0;j--){
cin>>numsB[j];
}
long long ret=0,base=1;
int weight;
for(int i=0;i<max(m,n);i++){
weight=max(max(numsA[i],numsB[i])+1,2);
ret=(ret+(numsA[i]-numsB[i])*base)%MOD;
base=(base*weight)%MOD;
}
cout<<ret;
return 0;
}
四、李白打酒加强版
1、题目:
话说大诗人李白,一生好饮。幸好他从不开车。
一天,他提着酒显,从家里出来,酒显中有酒2斗。他边走边唱:
无事街上走,提显去打酒。逢店加一倍,遇花喝一斗。
这一路上,他一共遇到店 N 次,遇到花 M 次。已知最后一次遇到的是花,他正好把酒喝光了。
请你计算李白这﹣路遇到店和花的顺序,有多少种不同的可能?
注意:显里没酒(0斗)时遇店是合法的,加倍后还是没酒;但是没酒时遇花是不合法的。
输入格式
第一行包含两个整数 N 和 M .
输出格式
输出一个整数表示答案。由于答案可能很大,输出模1000000007的结果。
2、代码:
#include <iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=105,mod=1000000007;
int n,m,res;
long long f[2*N][N][N];
signed main(){
cin>>n>>m;
f[0][0][2]=1;
for(int i=0;i<=n+m;i++){
for(int j=0;j<=m;j++){
for(int k=0;k<=m;k++){
if(i&&k%2==0){
f[i][j][k]=(f[i-1][j][k/2]+f[i][j][k])%mod;
}
if(j&&k>0){
f[i][j][k]=(f[i][j-1][k+1]+f[i][j][k])%mod;
}
}
}
}
cout<<f[n][m-1][1];
return 0;
}