# 其他：

CODIA链接：首页 | CODIA (bdaa.pro)

# 2023-保研

## 1.纸上得来终觉浅

#### 样例输入

``````4 4 2 1
1 2 3 4
2 3 4 1
3 4 1 2
4 1 2 3
1 0
0 -1
``````

#### 样例输出

``````-2 -2 2
-2 2 2
2 2 -2
``````

``````//
// Created by liu'bo'yan on 2024/7/20.
//
#include<bits/stdc++.h>
using namespace std;
#define IOS ios::sync_with_stdio(0);cin.tie(0);
int main()
{
int h, w, k, s;
IOS
cin >> h >> w >> k >> s;
vector < vector<int>>I(h, vector<int>(w, 0));
for (int i = 0; i < h; i++)
{
for (int j = 0; j < w; j++)
cin >> I[i][j];
}
vector<vector<int>>K(k, vector<int>(k, 0));
for (int i = 0; i < k; i++)
{
for (int j = 0; j < k; j++)
cin >> K[i][j];
}
int x = 0,y = 0;
vector<vector<int>> S((h-k)/s+1,vector<int>((w-k)/s+1,0));
for (int i = 0; i < h - k + 1 ; i += s)
{
for (int j = 0; j < w - k + 1; j += s)
{
int temp = 0;
for (int a = 0; a < k; a++)
{
for (int b = 0; b < k; b++)
temp += K[a][b] * I[i + a][b + j];
}
S[x][y] = temp;
y++;
}
x++;
y=0;
}
for (auto i : S)
{
for (auto j : i)
cout << j << " ";
cout << endl;
}
}

``````

## 3.不识庐山真面目

#### 样例输入

``````4
``````

#### 样例输出

``````8
``````

AC代码

``````//
// Created by liu'bo'yan on 2024/3/1.
//
#include <iostream>
using namespace std;
#define max_n 1000000
using ll=long long;
int prime[max_n + 5] = {0};  //素数表，存储找到的素数
int f[max_n + 5] = {0};      //f[i]表示数字i的因数的个数
int cnt[max_n + 5] = {0};    //cnt[i]表示数字i 最小质因数的幂次

void init() {
for (int i = 2; i <= max_n; i++) {
if (!prime[i]) {                //若数字i是素数
prime[++prime[0]] = i;      //存放在prime数组中
f[i] = 2;                   //素数的因数只有1和本身,所以f[i] = 2
cnt[i] = 1;                 //i = 1 * i，所以最小质因数的幂次为1
}
for (int j = 1; j <= prime[0]; j++) {  //遍历之前找到的素数，若prime[j] 小于数字i的最小质因数，则我们标记prime[i * prime[j]] = 1
if (i * prime[j] >  max_n) break;  //我们只要在2到max_n范围内的素数，若超过max_n，此时直接跳出
prime[i * prime[j]] = 1;
if (i % prime[j] == 0) {
//这部分解释见下文
f[i * prime[j]] = f[i] / (cnt[i] + 1) * (cnt[i] + 2);
cnt[i * prime[j]] = cnt[i] + 1;
break;
} else {  //prime[j]是素数，因此i和prime[j]的因数最多是1和prime[j]，又i % prime[j] != 0，所以i和prime[j]互素
f[i * prime[j]] = f[i] * f[prime[j]];
//两元素互素，因此他们的因数除1外没有交集，所以i * prime[j]的因数个数 = i的因数个数 * prime[j]的因数个数

cnt[i * prime[j]] = 1;
//因为从prime数组1号位开始向后遍历素数并且i % prime[j] != 0，所以prime[j]始终小于i的最小质因数，
//所以i * prime[j]最小质因数的幂次为prime[j]的幂次，即为1
}
}
}
return ;
}

int main() {
init();
ll ans = 1;
int n;
cin>>n;
for(int i=2;i<=n;i++){
ans+=(ll)f[i];
}
cout<<ans;
return 0;
}

``````

``````//
// Created by liu'bo'yan on 2024/7/20.
//
#include<iostream>
using namespace std;
int main()
{
int N;
cin>>N;
int sum=0;
for(int i=1;i<=N/2;i++)
{
sum+=N/i;
}
sum+=(N+1)/2;
cout<<sum;
}
``````

#中科大##算法##模拟##保研机试##数论#

1

08-09 21:48

1 1 评论