CSP真题练习
Posted 蛋黄液
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CSP真题练习相关的知识,希望对你有一定的参考价值。
202209
1.如此编码
#include<iostream>
using namespace std;
int n;
int a[30] = 0 ;//选项个数
long long m;//神秘数字
int b[30] = 0 ;
long long c[30] = 0 ;
int main()
//首先输入
cin >> n >> m;
c[0] = 1;//初始化
for (int i = 1; i <= n; i++)
cin >> a[i];//选项个数
c[i] = c[i - 1] * a[i];//初始化,前缀积
long long num = 0;//用来减去已经计算出来的数字
for (int j = 1; j <= n; j++)
b[j] = (m % c[j] - num) / c[j - 1];
num += b[j] * c[j - 1];
for (int k = 1; k <= n; k++)
cout << b[k] << ' ';
return 0;
2.何以包邮
反向使用01背包,动态规划
//反向01背包
#include<iostream>
#include<algorithm>
using namespace std;
#define N 300050
bool cmp(int a, int b)
return a < b;
int max(int a, int b)
if (a > b)
return a;
else
return b;
int main()
int n;//图书数量
int x;//包邮条件
int a[50];//价格数组
int min_num = 0;//输出的最小图书价格,一定要大于等于x
int sum = 0;
cin >> n >> x;
//双指针不可以,因为书本的数量不确定
//度量标准,必须要 m >= x
//动态规划 dp[i]存放的是 M-x 的最大价格,保证大于x
//寻找 总价M-x,查找最大值
int dp[N] = 0 ;
for (int i = 1; i <= n; i++)
cin >> a[i];
sum += a[i];
if (a[i] == x)
min_num = x;
int money = sum - x;//其实就是求用money的钱,最多能买多少本书。
//最后最大的dp[i] = max(dp[i],dp[i-a[i]+a[i]);
//最大值可能是要从上一次取得,但是也有可能是 dp[j-a[i]]+a[i];
// 因为是01问题,所以减去的是当前的重量。
//20 90 60 60 sum = 230,money = 130,计算用130最多能买多少本书,其实就是130的书包容量最多能容纳多少。
for (int i = 1; i <= n; i++)
for (int j = money; j >= a[i]; j--) //j就是剩下的钱,j>a[i]是要保证它能买得起这本书
// 根据01背包动态规划来思考
dp[j] = max(dp[j], dp[j - a[i]] + a[i]);
cout << sum-dp[money] << endl;
return 0;
3.防疫大数据
样例输入
9
1 4 1
0 1 1
-1 1 1
-1 2 1
0 2 2
0 3
0 3 1
1 2 2
1 3 2
0 0
0 0
0 0
0 0
0 0
0 1
5 4 1
1 0 1
样例输出
0 1
1 1 3
2 1 3
3 1 3
4 1 3
5 1 3
6 1 3
7
8
202206
1.归一化处理
#include<iostream>
#include<cmath>
using namespace std;
int main()
int n,array[1000];
// 输入
cin>>n;
for(int i=0;i<n;i++)
cin>>array[i];
// 逐个数据遍历求和
double sum = 0; //此处若将sum设置为int类型则结果将不满足精度要求
for(int i=0;i<n;i++)
sum += array[i];
double average = sum / n; //计算平均值
//计算方差
double variance = 0;
for(int i=0;i<n;i++)
variance += (array[i] - average) * (array[i] - average);
variance = sqrt(variance / n);
// 遍历数据并进行归一化计算
for(int i=0;i<n;i++)
cout<<(array[i]-average) / variance<<endl;
return 0;
以上是关于CSP真题练习的主要内容,如果未能解决你的问题,请参考以下文章