目录
[三.25 之和](#三.25 之和)
一.密密摆放
题目链接:https://www.lanqiao.cn/problems/20565/learning/

1.题目讲解

2.代码实现
cpp
#include <iostream>
using namespace std;
int main()
{
cout << 25 * 8 << endl;
return 0;
}
二.脉冲强度之和
题目链接:https://www.lanqiao.cn/problems/20555/learning/

1.题目讲解

2.代码实现
cpp
#include <iostream>
using namespace std;
bool check(int sum)
{
int x = sum % 10;
while(sum)
{
if(x != sum % 10)
{
return false;
}
sum /= 10;
}
return true;
}
int main()
{
long long ret = 0;
for(int k = 1;k <= 2025515;k++)
{
int sum = k * 10 + 45;
if(check(sum))
{
ret+=sum;
}
}
cout << ret << endl;
return 0;
}
三.25 之和
题目链接:https://www.lanqiao.cn/problems/20548/learning/

1.题目讲解

2.代码实现
cpp
#include <iostream>
using namespace std;
int main()
{
int n;
cin >> n;
long long sum = (n + n + 24) * 25 / 2;
cout << sum << endl;
return 0;
}
四.旗帜
题目链接:https://www.lanqiao.cn/problems/20543/learning/

1.题目讲解
直接把我们的cnt表打好,然后一直加就好了
2.代码实现
cpp
#include <iostream>
using namespace std;
int h,w;
int cnt[7];
string s = "LANQIAO";
int main()
{
cin >> h >> w;
string aim = s;
while(aim.size() < w)
{
aim += s;
}
aim+=s;
for(int i = 0;i < 7;i++)
{
int sum = 0;
for(int j = i;j < w + i;j++)
{
if(aim[j] == 'A')
{
sum++;
}
}
cnt[i] = sum;
}
int ret = 0;
for(int i = 0;i < h;i++)
{
ret += cnt[i % 7];
}
cout << ret << endl;
return 0;
}
五.数列差分
题目链接:https://www.lanqiao.cn/problems/20530/learning/

1.题目讲解

2.代码实现
cpp
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 1e5 + 10;
int a[N];
int b[N];
int n;
int main()
{
cin >> n;
for(int i = 1;i <= n;i++)
{
cin >> a[i];
}
for(int i = 1;i <= n;i++)
{
cin >> b[i];
}
sort(a + 1,a + 1 + n);
sort(b + 1,b + 1 + n);
int cnt = 0;
int aend = n,bend = n,abegin = 1,bbegin = 1;
while(aend >= abegin && bend >= bbegin)
{
if(a[aend] <= b[bend])
{
cnt++;
bend--;
abegin++;
}
else
{
aend--;
bend--;
}
}
cout << cnt << endl;
return 0;
}
六.树上寻宝
题目链接:https://www.lanqiao.cn/problems/20523/learning/

1.题目讲解

2.代码实现
cpp
#include <iostream>
#include <vector>
using namespace std;
#define int long long
const int N = 1e5 + 10;
vector<int> edges[N];
int n,k;
int w[N];
int ret;
void dfs(int x,int step,int fa)
{
if(step == -1)
{
return;
}
ret += w[x];
for(auto& e : edges[x])
{
if(e == fa)
{
continue;
}
dfs(e,step - 1,x);
}
}
signed main()
{
cin >> n >> k;
for(int i = 1;i <= n;i++)
{
cin >> w[i];
}
for(int i = 1;i <= n - 1;i++)
{
int u,v;
cin >> u >> v;
edges[u].push_back(v);
edges[v].push_back(u);
}
dfs(1,2 * k,0);
cout << ret << endl;
return 0;
}
七.翻转硬币
题目链接:https://www.lanqiao.cn/problems/20520/learning/


1.题目讲解



2.代码实现
cpp
#include <iostream>
using namespace std;
const int N = 1010,M = 3;
int n,m;
char a[M][N][N];//a[0]: 不反转的状态 a[1]: 反转的状态
int f[N][M][M];
int calc(char a[],char b[],char c[])
{
int sum = 0;
for(int j = 1;j <= m;j++)
{
int cnt = 0;
if(b[j] == b[j - 1])
{
cnt++;
}
if(b[j] == b[j + 1])
{
cnt++;
}
if(b[j] == a[j])
{
cnt++;
}
if(b[j] == c[j])
{
cnt++;
}
sum += cnt * cnt;
}
return sum;
}
int main()
{
cin >> n >> m;
for(int i = 1;i <= n;i++)
{
for(int j = 1;j <= m;j++)
{
cin >> a[0][i][j];
if(a[0][i][j] == '0')
{
a[1][i][j] = '1';
}
else
{
a[1][i][j] = '0';
}
}
}
for(int i = 1;i <= n;i++)
{
for(int now = 0;now <= 2;now++)
{
for(int down = 0;down <= 2;down++)
{
int x = f[i - 1][0][now] + calc(a[0][i - 1],a[now][i],a[down][i + 1]);
int y = f[i - 1][1][now] + calc(a[1][i - 1],a[now][i],a[down][i + 1]);
f[i][now][down] = max(x,y);
}
}
}
cout << max(f[n][0][0],f[n][1][0]) << endl;
return 0;
}
八.破解信息
题目链接:https://www.lanqiao.cn/problems/20508/learning/

1.题目讲解

2.代码实现
cpp
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 1e5 + 10,M = 30;
string s;
int cnt[M];
int main()
{
cin >> s;
for(int i = 0;i < s.size();i++)
{
cnt[s[i] - 'a']++;
}
for(int i = 26;i >= 0;i--)
{
if(cnt[i])
{
for(int j = 0;j < cnt[i];j++)
{
cout << char(i + 'a');
}
return 0;
}
}
return 0;
}