第十一届蓝桥杯国赛
Posted 中二病没有蛀牙
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第十一届蓝桥杯国赛相关的知识,希望对你有一定的参考价值。
A
答案:563
代码:
#include <bits/stdc++.h>
using namespace std;
int check(int x)
{
while(x > 0){
int a = x%10;
if(a == 2) return 1;
x /= 10;
}
return 0;
}
int main()
{
int ans = 0;
for(int i = 1; i<= 2020;i++){
if(check(i))
ans++;
}
cout<<ans<<endl;
}
B
C
答案:39001250856960000
思路:分解质因数,然后约数求和公式
#include <bits/stdc++.h>
using namespace std;
#define INF 0x3f3f3f3f
const int maxn = 10005;
typedef long long ll;
int p[maxn];
int main()
{
for(int i = 2;i <= 100;i++){
int n = i;
for(int j = 2 ;j <= n / j;j++){
while(n % j == 0){
p[j]++;
n /= j;
}
}
if(n > 1)
p[n]++;
}
// cout<<sum<<endl;;
ll ans = 1;
// for(auto i :mp){
// cout<<prime[i]<<",";
// ans = ans * ll(prime[i]+1);
// }
for(int i = 2; i <= 100; i++)
if(p[i]){
ans *= (p[i] + 1);
cout<<ans<<endl;
}
cout<<ans<<endl;
return 0;
}
D
E
答案:552
#include <bits/stdc++.h>
using namespace std;
#define INF 0x3f3f3f3f
const int maxn = 10005;
typedef long long ll;
int f[maxn][maxn];
int vis[maxn][maxn];
int ans = 0;
void dfs(int x,int y,int l){
if(x < 0 || x >= 4 || y < 0 || y >= 4) return;
if(vis[x][y])
return;
if(l == 16){
ans++;
return ;
}
vis[x][y] = 1;
dfs(x + 1,y,l+1);
dfs(x,y+1,l + 1);
dfs(x - 1,y,l + 1);
dfs(x,y - 1,l + 1);
vis[x][y] = 0;
}
int main()
{
for(int i = 0; i < 4; i++)
for(int j = 0; j < 4; j++){
dfs(i,j,1);
}
cout<<ans<<endl;
return 0;
}
G
最长上升子序列+路径输出
#include <bits/stdc++.h>
using namespace std;
#define INF 0x3f3f3f3f
const int maxn = 10005;
typedef long long ll;
set<string> st;
vector<string> a;
string vis[maxn];
int f[maxn];
int la[maxn];
stack<string> fans;
int main()
{
string s,ss;
cin>>s;
ss= "";
ss += s[0];
for(int i = 1;i < s.length();i++){
if( s[i] >= 'A' && s[i] <= 'Z'){
st.insert(ss);
a.push_back(ss);
ss = "";
}
ss += s[i];
}
st.insert(ss);
a.push_back(ss);
int n =st.size();
// for(auto i : st){
// // vis[++n] = i;
// cout<<i<<endl;
// }
int ans = 0,k = 0;
for(int i = 0;i < n; i++){
f[i] = 1;
for(int j = 0;j < i ;j++){
if(a[j] < a[i]){
if(f[j] + 1> f[i]){
// cout<<a[j] <<" "<<a[i]<<endl;
// cout<<a[i]<<endl;
la[i] = j;
f[i] = f[j] + 1;
if(ans < f[i]){
ans = f[i];
k =i;
}
}
}
// cout<<f[j]<<" ";
}
// cout<<endl;
}
// cout<<ans<<" "<<k<<endl;
for (int i = 0;i < ans; ++i)
{
fans.push(a[k]);
k = la[k];
}
while (!fans.empty())
{
cout<<fans.top();
fans.pop();
}
cout<<endl;
// cout<<ans[n-1]<<endl;
return 0;
}
H
以上是关于第十一届蓝桥杯国赛的主要内容,如果未能解决你的问题,请参考以下文章
第十三届蓝桥杯国赛真题 PythonB组 复盘以及获奖感言(国一!!!)
蓝桥杯国赛真题16Scratch昼夜交替 少儿编程scratch蓝桥杯国赛真题和答案讲解