汉滨区住房和城乡建设局网站,在阿里云安装wordpress,徐州学习网站建设,中山网站制目录
刷题集训 A
Day 1 成绩分析
Day 1 饮料换购
刷题集训 B
Day 1 分巧克力
Day 1 递增三元组
Day 1 小明的衣服
刷题集训 C
Day 1 数字三角形
Day 1 跳跃
Day 1 蓝太子序列 刷题集训 A
Day 1 成绩分析
题目描述
小蓝给学生…目录
刷题集训 A
Day 1 成绩分析
Day 1 饮料换购
刷题集训 B
Day 1 分巧克力
Day 1 递增三元组
Day 1 小明的衣服
刷题集训 C
Day 1 数字三角形
Day 1 跳跃
Day 1 蓝太子序列 刷题集训 A
Day 1 成绩分析
题目描述
小蓝给学生们组织了一场考试卷面总分为 100 分每个学生的得分都是一个 0 到 100 的整数。
请计算这次考试的最高分、最低分和平均分。
输入描述
输入的第一行包含一个整数 n (1≤n≤104)表示考试人数。
接下来 n 行每行包含一个 0 至 100 的整数表示一个学生的得分。
输出描述
输出三行。
第一行包含一个整数表示最高分。
第二行包含一个整数表示最低分。
第三行包含一个实数四舍五入保留正好两位小数表示平均分。
#includebits/stdc.h
using namespace std;int main(){int n;cinn;int a[n];double sum0;for(int i0; in; i) {cina[i];}for(int i0; in; i) {suma[i];}sort(a,an);couta[n-1]endl;couta[0]endl;float avgsum/n;printf(%.2lf,avg);return 0;
}
Day 1 饮料换购
题目描述
乐羊羊饮料厂正在举办一次促销优惠活动。乐羊羊 C 型饮料凭 3 个瓶盖可以再换一瓶 C 型饮料并且可以一直循环下去(但不允许暂借或赊账)。
请你计算一下如果小明不浪费瓶盖尽量地参加活动那么对于他初始买入的 n 瓶饮料最后他一共能喝到多少瓶饮料。
输入描述
输入一个整数 n(0n1000)表示开始购买的饮料数量。
输出描述
输出一个整数表示实际得到的饮料数
#includebits/stdc.h
using namespace std;int main(){int n;cinn;int sumn; while(n3){int yun%3;int shang n/3;sumshang;nyushang;}coutsumendl;return 0;
} 刷题集训 B
Day 1 分巧克力
题目描述
儿童节那天有 K 位小朋友到小明家做客。小明拿出了珍藏的巧克力招待小朋友们。
小明一共有 N 块巧克力其中第 i 块是 Hi×Wi 的方格组成的长方形。为了公平起见
小明需要从这 N 块巧克力中切出 K 块巧克力分给小朋友们。切出的巧克力需要满足 形状是正方形边长是整数; 大小相同;
例如一块 6x5 的巧克力可以切出 6 块 2x2 的巧克力或者 2 块 3x3 的巧克力。
当然小朋友们都希望得到的巧克力尽可能大你能帮小明计算出最大的边长是多少么
输入描述
第一行包含两个整数 N,K。
以下 N 行每行包含两个整数 Hi,Wi 。
输入保证每位小朋友至少能获得一块 1x1 的巧克力。
输出描述
输出切出的正方形巧克力最大可能的边长。
#includebits/stdc.h
using namespace std;
const int maxn 1e55;
int w[maxn], h[maxn];
int n,k;
int Enum(int l, int r){ //枚举边长为1到上限 int lowl, highr;while(lowhigh){int mid(lowhigh)/2; //当前枚举的边长int cnt0;for(int i0; in; i){cnt(w[i]/mid)*(h[i]/mid);if(cntk) break; } if(cntk){lowmid1;}else{highmid-1;}}return low-1;}
int main(){cinnk;int res0;for(int i0; in; i){cinw[i]h[i];resmax(res, min(w[i],h[i])); //找到所有巧克力中较小边的最大值作为枚举上限}coutEnum(1,res);return 0;
}
Day 1 递增三元组 #includebits/stdc.h
using namespace std;
typedef long long LL;
int main(){long long n;cinn;long long a[n],b[n],c[n];for(int i0; in; i){cina[i];}sort(a,an);//从小到大 for(int i0; in; i){cinb[i];}sort(b,bn);for(int i0; in; i){cinc[i];}sort(c,cn);//LL res0, l0, r0;for(int i0;in;i){while(a[l]b[i]ln) l;//l停止时a[l]等于或大于b[i]while(c[r]b[i]rn) r;//r停止时c[r]大于b[i]res(LL)l*(n-r);}coutresendl;return 0;
}
Day 1 小明的衣服
题目描述
小明买了 n 件白色的衣服他觉得所有衣服都是一种颜色太单调希望对这些衣服进行染色每次染色时他会将某种颜色的所有衣服寄去染色厂第 i 件衣服的邮费为ai 元染色厂会按照小明的要求将其中一部分衣服染成同一种任意的颜色之后将衣服寄给小明 请问小明要将 n 件衣服染成不同颜色的最小代价是多少
输入描述
第一行为一个整数 n 表示衣服的数量。
第二行包括 n 个整数a1,a2...an 表示第 i 件衣服的邮费为ai 元。
输出描述
输出一个整数表示小明所要花费的最小代价。
#includebits/stdc.h
using namespace std;
typedef long long ll;
ll ans;
// 1、每次染一件路费最贵的。
// 2、每次染除了最贵那件其他的。
// 二者结果一样可用优先队列实现
// 每次取最大的两个出队将二者和入队
// 相当于每次取最大的和再加上之前算出的和。
// 过程相当于每次摘走最大的累和。int main(){int n;cinn;//定义一个优先队列 并排序 greater是升序小堆栈 less是降序 priority_queuell, vectorll, greaterll q;for(int i0; in; i){ll x;cinx;//push() 表示将元素插到队尾 q.push(x);}//取了n-1次 while(q.size()1){ll aq.top(); q.pop();ll bq.top(); q.pop();ll cab;ansc;q.push(c);} coutansendl;return 0;
} 刷题集训 C
Day 1 数字三角形 上图给出了一个数字三角形。从三角形的顶部到底部有很多条不同的路径。对于每条路径把路径上面的数加起来可以得到一个和你的任务就是找到最大的和。
路径上的每一步只能从一个数走到下一层和它最近的左边的那个数或者右 边的那个数。此外向左下走的次数与向右下走的次数相差不能超过 1。
#includebits/stdc.h
using namespace std;
const int N1e210;
int n, a[N][N], dp[N][N];
signed main(){memset(dp, -0x3f, sizeof(dp));cinn;for(int i1; in; i){for(int j1; ji; j){cina[i][j];}} dp[1][1]a[1][1];for(int i2; in; i){for(int j1; ji; j){dp[i][j]max(dp[i-1][j-1],dp[i-1][j])a[i][j];}}if((n-1)1) coutmax(dp[n][1(n-1)/2],dp[n][1(n-1)/21])\n;else coutdp[n][1(n-1)/2]\n; return 0;
}
Day 1 跳跃
题目描述
小蓝在一个n 行 m 列的方格图中玩一个游戏。
开始时小蓝站在方格图的左上角即第 1 行第 1 列。
小蓝可以在方格图上走动走动时如果当前在第r 行第 c 列他不能走到行号比 r 小的行也不能走到列号比 c 小的列。同时他一步走的直线距离不超过 3。
例如如果当前小蓝在第 3 行第 5 列他下一步可以走到第 3 行第 6 列、第 3 行第 7 列、第 3 行第 8 列、第 4 行第 5 列、第 4 行第6 列、第 4 行第 7 列、第 5 行第 5 列、第 5 行第 6 列、第 6 行第 5 列之一。
小蓝最终要走到第 n 行第 m 列。
在图中有的位置有奖励走上去即可获得有的位置有惩罚走上去就要接受惩罚。奖励和惩罚最终抽象成一个权值奖励为正惩罚为负。
小蓝希望从第 1行第 1 列走到第 n 行第m 列后总的权值和最大。请问最大是多少
#includebits/stdc.h
using namespace std;
int dir[9][2]{{0,1},{0,2},{0,3},{1,0},{1,1},{1,2},{2,0},{2,1},{3,0}};
int n,m;
int M[102][102];
int dp[102][102];
int ans-99999;void dfs(int x, int y, int sum){dp[x][y]1;//起始点sum if(sumans) return;//一行一列 if(xnym){anssum;}else{for(int i0;i9;i){int xxxdir[i][0];int yyydir[i][1];if(xx1xxnyymdp[xx][yy]0){dfs(xx,yy,sumM[xx][yy]);dp[xx][yy]0;}}}
}int main(){memset(dp, 0, sizeof(dp));cinnm;for(int i1; in; i){for(int j1; jm; j){cinM[i][j];}} dfs(1,1,M[1][1]);coutansendl; return 0;
}
Day 1 蓝太子序列
题目描述
L 星球上的生物由蛋蓝质组成每一种蛋蓝质由一类称为蓝肽的物资首尾连接成一条长链后折叠而成。
生物学家小乔正在研究 L 星球上的蛋蓝质。她拿到两个蛋蓝质的蓝肽序列想通过这两条蓝肽序列的共同特点来分析两种蛋蓝质的相似性。
具体的一个蓝肽可以使用 1 至 5 个英文字母表示其中第一个字母大写后面的字母小写。一个蛋蓝质的蓝肽序列可以用蓝肽的表示顺序拼接而成。
在一条蓝肽序列中如果选取其中的一些位置把这些位置的蓝肽取出并按照它们在原序列中的位置摆放则称为这条蓝肽的一个子序列。蓝肽的子序列不一定在原序列中是连续的中间可能间隔着一些未被取出的蓝肽。
如果第一条蓝肽序列可以取出一个子序列与第二条蓝肽序列中取出的某个子序列相等则称为一个公共蓝肽子序列。
给定两条蓝肽序列找出他们最长的那个公共蓝肽子序列的长度。
#includebits/stdc.h
using namespace std;
int dp[1005][1005];
string s1, s2;//要输入的两个序列
string str1[1005], str2[1005];//记录两个序列的所有子序列
int cnt1, cnt2;int main(){cins1s2;int d1s1.length(), d2s2.length();//子序列首字母大写,后几位全小写for(int i0; id1;){cnt1;if(s1[i]As1[i]Z){str1[cnt1]s1[i];while(s1[i]as1[i]z){str1[cnt1]s1[i];}}}//for (int i 0; i d2;){cnt2;if (s2[i] A s2[i] Z){str2[cnt2] s2[i];while (s2[i] a s2[i] z){str2[cnt2] s2[i];} }}//遍历for (int i 1; i cnt1; i)//遍历所有子序列for (int j 1; j cnt2; j){if (str1[i] str2[j]) dp[i][j] dp[i - 1][j - 1] 1;//这里上文已解释过else dp[i][j] max(dp[i][j - 1], dp[i - 1][j]);}cout dp[cnt1 ][cnt2 ] endl;return 0;
}