第十一届蓝桥杯国赛
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
以上是关于第十一届蓝桥杯国赛的主要内容,如果未能解决你的问题,请参考以下文章