蓝桥杯真题浅做提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
- 1.刷题统计
- 输入格式
- 输出格式
- 输入样例:
- 输出样例:
- 无思路:
- 2.修剪灌木
- 输入格式
- 输出格式
- 数据范围
- 输入样例:
- 输出样例:
- 解题思路:
- 3.X 进制减法
- 输入格式
- 输出格式
- 数据范围
- 输入样例:
- 输出样例:
- 怨种心得
- 解题思路:
- 字串分值和
- 输入格式
- 输出格式
- 输入样例:
- 输出样例:
- 解释样例:
1.刷题统计
小明决定从下周一开始努力刷题准备蓝桥杯竞赛。
他计划周一至周五每天做 a 道题目,周六和周日每天做 b 道题目。
请你帮小明计算,按照计划他将在第几天实现做题数大于等于 n 题?
输入格式输入一行包含三个整数 a,b和 n。
输出格式输出一个整数代表天数。
###数据范围
对于 50%50% 的评测用例,1≤a,b,n≤10^6 ,
对于 100%100% 的评测用例,1≤a,b,n≤10^18 。
输出样例:10 20 99
无思路:8
限于蓝桥杯的模式,而我又是菜鸡,当时这题的时候直接暴力解法,用for循环直接跑数据范围太大,肯定炸,现在重新做才明白之坑,裂开,我是fw,简单直接上代码
#includeusing namespace std; #define ll long long int main() { ll ans=0,a,b,n; cin>>a>>b>>n; ans=n/(a*5+b*2); ans*=7; n=n%(a*5+b*2); for(int i=1;i<=5;i++) { if(n>0) { n-=a; ans++; } } for(int i=0;i<2;i++){ if(n>0){ n-=b; ans++; } } cout< 2.修剪灌木 爱丽丝要完成一项修剪灌木的工作。
有 N 棵灌木整齐的从左到右排成一排。
爱丽丝在每天傍晚会修剪一棵灌木,让灌木的高度变为 0 厘米。
爱丽丝修剪灌木的顺序是从最左侧的灌木开始,每天向右修剪一棵灌木。
当修剪了最右侧的灌木后,她会调转方向,下一天开始向左修剪灌木。
直到修剪了最左的灌木后再次调转方向。
然后如此循环往复。
灌木每天从早上到傍晚会长高 1 厘米,而其余时间不会长高。
在第一天的早晨,所有灌木的高度都是 0 厘米。爱丽丝想知道每棵灌木最高长到多高。
输入格式一个正整数 N,含义如题面所述。
输出格式输出 N 行,每行一个整数,第行表示从左到右第 i 棵树最高能长到多高。
数据范围对于 30% 的数据,N≤10,
对于 100% 的数据,1输入样例: 输出样例:3
解题思路:4
2
4这题应该算基础了,当时根据记忆应该是做出来了的,就是找下规律,算是对我比较友好的,上代码
#includeusing namespace std; #define ll long long int main() { ll a[10005],n; cin>>n; if(n%2==0){ int k=n,l=n; for(int i=n/2;i>=1;i--) a[i]=k,k=k+2; for(int i=n/2+1;i<=n;i++) a[i]=l,l=l+2; } else{ int k=n+1,l=n-1; for(int i=n/2;i>=1;i--) a[i]=k,k=k+2; for(int i=n/2+1;i<=n;i++) a[i]=l,l=l+2; } for(int i=1;i<=n;i++) cout< 3.X 进制减法 进制规定了数字在数位上逢几进一。
X 进制是一种很神奇的进制,因为其每一数位的进制并不固定!例如说某种 X 进制数,最低数位为二进制,第二数位为十进制,第三数位为八进制,则 X 进制数 321 转换为十进制数为 65。
现在有两个 X 进制表示的整数 A 和 B,但是其具体每一数位的进制还不确定,只知道 A 和 B 是同一进制规则,且每一数位最高为 N 进制,最低为二进制。请你算出 A−B 的结果最小可能是多少。
请注意,你需要保证 A 和 B 在 X 进制下都是合法的,即每一数位上的数字要小于其进制。
输入格式第一行一个正整数 N,含义如题面所述。
第二行一个正整数 Ma,表示 X 进制数 A 的位数。
第三行 Ma 个用空格分开的整数,表示 X 进制数 A 按从高位到低位顺序各个数位上的数字在十进制下的表示。
第四行一个正整数 Mb,表示 X 进制数 B 的位数。
第五行 Mb 个用空格分开的整数,表示 X 进制数 B 按从高位到低位顺序各个数位上的数字在十进制下的表示。
请注意,输入中的所有数字都是十进制的。
输出格式输出一行一个整数,表示 X 进制数 A−B 的结果的最小可能值转换为十进制后再模 1000000007 的结果。
数据范围对于 30% 的数据,N≤10;Ma,Mb≤8,
输入样例:
对于 100% 的数据,2≤N≤1000;1≤Ma,Mb≤100000;A≥B。输出样例:11
3
10 4 0
3
1 2 0怨种心得94
当时比赛时做这题时还有点小骄傲,感觉这题很难,毕竟我是看了20几分钟才想出来,然后就疯狂敲,敲了五六十行,但最后好像是数据全过了,还行,现在看到别人题解,发现自己就是个大怨种,果然赛后看题解很重要,害。
解题思路:这题开两个数组存数据,根据题意输入,注意倒叙,加减好处理,最后两数组各项相减,取模后a可能会小于b,加上模数,再取模。
#includeusing namespace std; #define ll long long const int N =1000000007; int a[100010]={0},b[100010]={0}; int main() { int n,k,l; cin>>n>>k; for(int i=k;i;i--) cin>>a[i]; cin>>l; for(int i=l;i;i--) cin>>b[i]; ll ans=0; for(int i=k;i;i--) { ans= ans*max({2,a[i]+1,b[i]+1})%N; ans=((ans+a[i]-b[i])%N+N)%N; } cout< 字串分值和 对于一个字符串S ,我们定义S 的分值f (S ) 为S 中出现的不同的字符个数。
例如f (”aba”) = 2, f (”abc”) = 3, f (”aaa”) = 1。
现在给定一个字符串S [0 : n - 1](长度为n),请你计算对于所有S 的非空子串S [i : j](0 ≤ i ≤ j < n), f (S [i:j]) 的和是多少。
输入格式输入一行包含一个由小写字母组成的字符串S 。
对于所有评测用例,1 ≤ n ≤ 100000。
输出格式输出一个整数表示答案。
输入样例:输出样例:ababc
解释样例:28
子串 f值
a 1
ab 2
aba 2
abab 2
ababc 3
b 1
ba 2
bab 2
babc 3
a 1
ab 2
abc 3
b 1
bc 2
c 1这题可以用常规方法遍历做,但也有更好的理解方法,根据解释样例,可以知道,每个字符串中只有第一个出现的字符串具有计数效益,所以记录n-i+1
作为每个字符的之后的字符数作为具有该字符的子字符串个数,并将每个字符通过数组记录位置,每个字符减去前一个该字符出现的位置,代表它能够有计数效益的个数,然后与n-i+1相乘代表该字符的总计数,相加之和得出结果#includeusing namespace std; #define ll long long char c[10000]; ll ans=0; int main(){ string c; cin>>c; int k[10000]; int n=c.size(); c=' '+c; for(int i=1;i<=n;i++){ ans +=(ll)(i-k[c[i]])*(n-i+1); k[c[i]]=i; } cout<



