海南网站优化公司,辽宁建设工程信息网中标公示几天,医保微信小程序是什么,seo标题优化分析范文VJ测试链接考试链接 成绩表如下#xff0c;信息学是非常检验平时努力的#xff0c;而且也是一分耕耘一分收获的#xff0c;总的来说每天订正晚训跟只订正一部分题还是有区别的…希望同学们再接再厉。
A题 简单判断题#xff0c;单独判断首字母#xff0c;再判断其余字母…VJ测试链接考试链接 成绩表如下信息学是非常检验平时努力的而且也是一分耕耘一分收获的总的来说每天订正晚训跟只订正一部分题还是有区别的…希望同学们再接再厉。
A题 简单判断题单独判断首字母再判断其余字母。
#includebits/stdc.h
using namespace std;
char s[500];
int main(){cins1;int nstrlen(s1);bool oktrue;for(int i2;in;i){if(as[i]s[i]z){}else{okfalse;break;}}if(oktrueAs[1]s[1]Z)coutYes;else coutNo;return 0;
}B题
首先你要知道什么叫字母表顺序最早
abcdefg....这就是字母表顺序
所以本题我们先统计每种字母的个数从中找到数量最多的值
然后枚举字母表a~z谁的数量最大数量那么就是输出它cpp
#includebits/stdc.h
using namespace std;
char s[1005];
int vis[30];
int main(){cins1;int nstrlen(s1);int ma0;for(int i1;in;i){vis[s[i]-a1];mamax(ma,vis[s[i]-a1]);} for(int i1;i26;i){if(vis[i]ma){coutchar(ai-1);return 0;}}return 0;
}
C题 因为A菜需要N个菜各个材料才能做出来最终能最多做出来多少个A菜取决于哪种材料是最经不起消耗的也就是假如说某种材料能支持最多做800个A菜但是另一种材料最多只支持做8个A菜那么你只能最多做8个A菜因为会涉及到材料不足的问题。所以我们先枚举一遍A菜的消耗计算出i材料最多能支持做多少个A菜取最小值那么就能计算出最多能做出多少道A菜。
枚举制作i0~iA_max道A菜然后枚举N个原材料的消耗A的材料消耗了以后用剩余的材料去看看最多能计算多少个B菜然后A的数量B的数量就是总数对总数取最大值就是我们最多能做的总菜数。注意存在消耗为0的情况。
#includebits/stdc.h
using namespace std;
#define int long long
int Q[20];
int A[20];
int B[20];
signed main(){int n;cinn;for(int i1;in;i){cinQ[i];}int curA1e7;for(int i1;in;i){cinA[i];if(A[i]0)continue;if(Q[i]/A[i]curA){curAQ[i]/A[i];}}//计算最多做多少个A for(int i1;in;i){cinB[i];} int ans0;bool oktrue;for(int i0;icurA;i){//制作I个A菜 int now1e7;for(int j1;jn;j){if(Q[j]-i*A[j]0){okfalse;break;}else if(Q[j]-i*A[j]0){if(B[j]0)continue;else now0;}else if(B[j]!0){nowmin(now,(Q[j]-i*A[j])/B[j]);}} if(!ok)break;ansmax(ans,inow);}coutans;return 0;
}D题 简单题枚举o即可
#includebits/stdc.h
using namespace std;signed main(){int n;cinn;coutL;for(int i1;in;i){couto;}coutng;return 0;
}
E题 求二进制末尾里面连续0的个数 。。。。其实就是类似于十进制数拆出每个数字位的方法 因为都是从低位开始拆的也就是末尾 所以对数字N拆分二进制不断除2 %2余数为0说明当前这个位的数字是0那么答案否则break
#includebits/stdc.h
using namespace std;signed main(){int n;cinn;int ans0;while(n!0){if(n%20)ans;else break;nn/2;}coutans;return 0;
}
F题 这其实是进制思想的经典套路题 有所的位的取值情况只能是偶数那么相当于你每一位上有5种情况组合成数字求第多少小的数字。
我们不妨想想这个问题对于十进制数来说每个位取值是0~9 我要求第x小的数如何求呢? 我们可以把x逐步地从低位开始摆放因为十进制情况第x小就是数字x。同理把这个方法拓展到本题每个位有五种选择我们就当成5进制那么问题就变成了把题目输入的N转换成5进制。5进制位上的0 实际上表示的是数字0 5进制位上的1实际上表示的数字是25进制位上的2实际上表示的是数字4…以此类推
最终就把数字求出来了 这个题实际上跟去年温州市赛的最后一题原理一模一样
#includebits/stdc.h
using namespace std;
int A[500];
int B[10];
signed main(){long long int n;cinn;n--;if(n0){cout0;return 0;}int len0;B[0]0;for(int i1;i4;i){B[i]B[i-1]2;}while(n!0){A[len]B[n%5];nn/5;}for(int ilen;i1;i--)coutA[i];return 0;
}
G题 我们考虑以ai结尾的最长左金字塔序列长度为L[i] ,以ai为首的最长右金字塔序列长度为R[i] 那么实际上如果以ai作为金字塔中心能够成的最长金字塔序列就是L[i] 跟R[i] 取最小值。
扫一遍所有的ai就能求出答案。 问题是L[i]如何求解? 考虑一种状态转移 L[0]0 那么对于ai来说L[i]min(L[i-1]1,ai) 为什么呢? 因为左边以ai结尾金字塔的最长长度绝对不可能比ai本身还要大; 如果能跟前面衔接一下那么长度就是L[i-1]1; 当然有同学好奇这样子转移是如何做到移除第一项或者最后一项 的 我举个例子 1 1 1 1 2 3 4 5 从左到右依次对应的L[i]就是1 1 1 1 2 3 4 5,所以说如果存在a[i-1]与a[i]无法衔接的情况(因为衔接起来会导致当前L[i]a[i]) ,但是上一步至多是持平的所以说如此转移。
#includebits/stdc.h
using namespace std;
int L[200005];
int R[200005];
int A[200005];
int main(){int n;cinn;for(int i1;in;i){cinA[i];}for(int i1;in;i){L[i]min(L[i-1]1,A[i]);}int ans0;for(int in;i1;i--){R[i]min(R[i1]1,A[i]);ansmax(ans,min(R[i],L[i]));}coutans;return 0;
}