做网站运营需要学什么,个人建立网站后怎么盈利,浏览器的网站,html电影网站模板下载问题 A: Stones
题目描述 由于自行车状态错误#xff0c;森普尔开始每天早上从东到西走#xff0c;每天晚上走回去。走路可能会有点累#xff0c;所以森普这次总是玩一些游戏。 路上有很多石头#xff0c;当他遇到一块石头时#xff0c;如果是他遇到的奇数石头#xff0…问题 A: Stones
题目描述 由于自行车状态错误森普尔开始每天早上从东到西走每天晚上走回去。走路可能会有点累所以森普这次总是玩一些游戏。 路上有很多石头当他遇到一块石头时如果是他遇到的奇数石头他会尽可能把它扔到前面如果是偶数石头他会把它留在原地。现在给你一些关于路上石头的信息你要告诉我从起点到森普尔走过后最远的石头的距离。请注意如果两颗或两颗以上的石头停留在同一位置您将首先遇到较大的一颗Di最小的那颗如输入中所述。 输入 在第一行中有一个整数 T1T10这意味着输入文件中的测试用例。然后是 T 测试用例。 对于每个测试用例我会在第一行给你一个整数 N0N100000这意味着路上的石头数量。然后跟着N条线行中有两个整数Pi0Pi100000和Di0Di1000这意味着第i块石头的位置以及Sempr可以将其扔多远。 输出 只需为一个测试用例输出一行如 Desc翻录中所述。 样例输入
2
2
1 5
2 4
2
1 5
6 6样例输出
11
12思路首先题里面的奇数往前扔偶数不动是需要的石子是第几个的奇偶不是石子位置的奇偶需要单开一个变量去存。这道题麻烦在于往前扔的石头加入队列也需要跟着一起排序所以用一个堆去实现。
#includebits/stdc.h
using namespace std;
#define int long longstruct PII{int first;int second;//重新定义 ,用于堆的排序 //让位置小的同位置重量大的在前面 friend bool operator(PII a, PII b){if(a.first b.first) return a.second b.second;return a.first b.first;}
};signed main()
{int t;cin t;while(t --){priority_queuePII q;int n;cin n;for(int i 0; i n; i ){int p, d;cin p d;q.push({p, d});}int cnt 1;//用于记录当前遇到石子的序号奇数往前扔PII tmp;while(q.size()){tmp q.top();q.pop();if(cnt 1){tmp.first tmp.second;q.push(tmp);}cnt ;}cout tmp.first endl;}return 0;} 问题 B: Expedition
题目描述 一群母牛抓住卡车冒险进入从林深处。不幸的是司机跑过一块岩石时卡车的油箱被刺穿。现在卡车每行驶一段距离就会泄漏1单位燃油。要修理卡车母牛需要沿着一条蜿蜓曲折的道路驶向最近的城镇(相距不超过 1000000 单位)。在这条道路上在城镇和卡车的当前位置之间有N个(1≤N≤10000加油站卡车可以停下来获取更多的燃料每站1~100 单位)。 从林对人类来说是一个危险的地方对母牛来说更为危险。因此母牛希望在前往小镇的途中尽可能少地停下加油。幸运的是卡车上的油箱容量很大以至于可以容纳的燃油量实际上没有限制。卡车目前离镇区L单位有P单位燃料 1≤P≤1000000。 确定到达城镇或者母牛根本无法到达城镇所需的最少停靠站数。 输入 第1行一个整数N。 第2~N1行每行包含两个以空格分隔的整数用于描述加油站第一个整数是从城镇到停靠站的距离第二个整数是该站的可用燃料量。 第N2行两个以空格分隔的整数L和P。 输出 第一行一个整数给出到达城镇所需的最少燃料停止数量。如果无法到达城镇则输出-1。 样例输入
4
4 4
5 2
11 5
15 10
25 10样例输出
2ssn感觉应该是英文直接翻译的读原本外文的题目都是别别扭扭的。 思路注意所给的加油站的距离是到终点的距离为了思考方便我转成了到起点的距离。由于到终点的距离是从小到大给的反过来之后顺序就颠倒了排一遍序之后是我按顺序遇到的加油站。 把目前油量能到的加油站加入堆把目前的油量用完还没有到终点就选一个我能到的并且能加油最多量的加油站以此类推直到到达终点如果当目前油量耗完没有到达终点并且堆里没有加油站可用了则就无法到达终点。
#includebits/stdc.h
using namespace std;
typedef long long LL;
typedef pairint, int PII;
const int N 10010;
PII s[N];int main()
{int n;cin n;for(int i 1; i n; i ){int d, p;cin d p;s[i] {d, p};}int L, P;cin L P;for(int i 1; i n; i ) s[i].first L - s[i].first;sort(s 1, s 1 n);priority_queueint q;int ans 0, pos 0, p P;s[n 1].first L;for(int i 1; i n 1; i ){int dis s[i].first - pos;while(p - dis 0){if(q.empty()){puts(-1);return 0;}p q.top();q.pop();ans ;}p - dis;pos s[i].first;q.push(s[i].second);}cout ans endl;return 0;
}问题 C: Rescue
题目描述 安琪儿被魔族抓住了他被莫利吉关进了监狱。监狱被描述为N * MNM 200矩阵。监狱里有墙、道路和警卫。
安吉尔的朋友想救安吉尔。他们的任务是接近安吉尔。我们假设“接近安琪儿”是为了到达安琪儿停留的位置。当网格中有警卫时我们必须杀死他或她才能进入网格。我们假设我们向上、向下、向右、向左移动需要 1 个单位的时间杀死一个警卫也需要 1 个单位的时间。我们足够强大可以杀死所有的警卫。
你必须计算接近安吉尔的最短时间。当然我们只能向上、向下、向左和向右移动到边界内的相邻网格。 输入 第一行包含两个整数代表 N 和 M. 然后是 N 行每行都有 M 个字符。“.”代表道路“a”代表天使“r”代表安吉尔的每个朋友。ssn猜测那x就代表警卫呗 处理到文件末尾。 输出 对于每个测试用例程序应输出一个整数代表所需的最短时间。如果这样的数字不存在你应该输出一行包含“Poor ANGEL has to stay in the prison all his life.”。
样例输入
7 8
#.#####.
#.a#..r.
#..#x...
..#..#.#
#...##..
.#......
........样例输出
13思路这种矩阵图应该是典型的广搜题但还是比较麻烦的警卫问题还有长度更新问题不知道怎么解决所以深搜试试如果爆了再写广搜。 可以看出来不只有一个朋友去救他但起初我们并不知道从哪个朋友走可以到达终点最短需要遍历每一个朋友也就是我从终点出发到达不同顶点的最短距离。
#includebits/stdc.h
using namespace std;
typedef long long LL;
const int N 210;
int n, m;
LL minl;
bool st[N][N];
char a[N][N];void dfs(int x, int y, LL len)
{//return条件越界访问过走到了墙里面外加如果现在len已经比我上一个记录的min大了就不用遍历这条路了 if(x 0 || x n || y 0 || y m || st[x][y] || a[x][y] # || len minl) return;if(a[x][y] r){minl min(minl, len);return;}if(a[x][y] x) len ;st[x][y] true;dfs(x 1, y, len 1);dfs(x - 1, y, len 1);dfs(x, y 1, len 1);dfs(x, y - 1, len 1);st[x][y] false;}
int main()
{cin n m;int beginx, beginy;for(int i 0; i n; i ){scanf(%s, a[i]);for(int j 0; j m; j )if(a[i][j] a) beginx i, beginy j; }LL len 0;minl 1e9;dfs(beginx, beginy, len);if(minl 1e9) cout Poor ANGEL has to stay in the prison all his life.;else cout minl;return 0;
}问题 D: Oil Deposits
buctoj-2023寒假集训-进阶训练赛十六问题E
问题 E: [蓝桥杯2017初赛]分巧克力
题目描述 儿童节那天有K位小朋友到小明家做客。小明拿出了珍藏的巧克力招待小朋友们。 小明一共有N块巧克力其中第i块是Hi x Wi的方格组成的长方形。 为了公平起见小明需要从这 N 块巧克力中切出K块巧克力分给小朋友们。切出的巧克力需要满足
形状是正方形边长是整数大小相同 例如一块6x5的巧克力可以切出6块2x2的巧克力或者2块3x3的巧克力。 当然小朋友们都希望得到的巧克力尽可能大你能帮小Hi计算出最大的边长是多少么
输入 第一行包含两个整数N和K。(1 N, K 100000) 以下N行每行包含两个整数Hi和Wi。(1 Hi, Wi 100000) 输入保证每位小朋友至少能获得一块1x1的巧克力。
输出 输出切出的正方形巧克力最大可能的边长。
样例输入
2 10
6 5
5 6样例输出
2思路二分初始设左右分别是切成 1 × 1 和 max × max。如果切成的块数大于等于所需要的k那就说明还能尝试再切大点反之就是切的太大了不够分边长要减少。 补充对于 left 和 right 更新 1还是 -1mid为什么还要再加1的问题属于二分的边界问题可以搜一下二分这个知识点理解一下什么时候会出现死循环理解不了“if(check(mid))若更新 r mid,则l mid 1;若更新l mid,则r mid - 1同时mid 1再除2” 背过
#includebits/stdc.h
using namespace std;
#define long long int
typedef pairint, int PII;signed main()
{int n, k, d 0;cin n k;PII p[n 1];for(int i 1; i n; i ){int h, w;cin h w;d max(d, max(h, w));p[i] {h, w};}int l 1, r d, mid;while(l r){mid l r 1 1;int cnt 0;for(int i 1; i n; i )//遍历每一块巧克力能分成多少半径为 mid 的正方形cnt (p[i].first / mid) * (p[i].second / mid);if(cnt k) l mid;else r mid - 1;}cout l;return 0;
}问题 F: [蓝桥杯2017初赛]购物单
题目描述 小明刚刚找到工作老板人很好只是老板夫人很爱购物。 老板忙的时候经常让小明帮忙到商场代为购物。小明很厌烦但又不好推辞。 这不XX大促销又来了老板夫人开出了长长的购物单都是有打折优惠的。 小明也有个怪癖不到万不得已从不刷卡直接现金搞定。 现在小明很心烦请你帮他计算一下需要从取款机上取多少现金才能搞定这次购物。 取款机只能提供100元面额的纸币。小明想尽可能少取些现金够用就行了。 你的任务是计算出小明最少需要取多少现金。
输入 本题无输入购物单如下物品名称被隐藏了。
**** 180.90 88折
**** 10.25 65折
**** 56.14 9折
**** 104.65 9折
**** 100.30 88折
**** 297.15 半价
**** 26.75 65折
**** 130.62 半价
**** 240.28 58折
**** 270.62 8折
**** 115.87 88折
**** 247.34 95折
**** 73.21 9折
**** 101.00 半价
**** 79.54 半价
**** 278.44 7折
**** 199.26 半价
**** 12.97 9折
**** 166.30 78折
**** 125.50 58折
**** 84.98 9折
**** 113.35 68折
**** 166.57 半价
**** 42.56 9折
**** 81.90 95折
**** 131.78 8折
**** 255.89 78折
**** 109.17 9折
**** 146.69 68折
**** 139.33 65折
**** 141.16 78折
**** 154.74 8折
**** 59.42 8折
**** 85.44 68折
**** 293.70 88折
**** 261.79 65折
**** 11.30 88折
**** 268.27 58折
**** 128.29 88折
**** 251.03 8折
**** 208.39 75折
**** 128.88 75折
**** 62.06 9折
**** 225.87 75折
**** 12.89 75折
**** 34.28 75折
**** 62.16 58折
**** 129.12 半价
**** 218.37 半价
**** 289.69 8折需要说明的是88折指的是按标价的88%计算而8折是按80%计算余者类推。 特别地半价是按50%计算。
输出 输出一个整数表示小明要从取款机上提取的金额单位是元。 思路用的笨方法手动输入输入的时候自己把几折换成小数。输出sum自己看一下然后再手动补成要求的数。
#includebits/stdc.h
using namespace std;int main()
{
// double sum 0, a, b;
// while(cin a b){
// sum a * b;
// }
// cout sum;cout 5200;return 0;
}问题 G: 三角函数最优拟合
题目描述 我们称一个数列 {an}\left\{ a_n \right\}{an} 是整三角数列 , 当且仅当它符合通项公式: aiAcos(π⋅i)B(A,BϵR,A≠0)a_i A\cos \left( \pi \cdot i \right) B\,\,\left( A,B\,\,\epsilon \,\,R, A\ne 0 \right)aiAcos(π⋅i)B(A,BϵR,A0) 现在给出一个数列{bn}\left\{ b_n \right\}{bn} ,在一次操作内,你可以选择一个数 i,1 ≤ bi ≤ n,任意更改 bi 的值. 请你求出将 {bn}\left\{ b_n \right\}{bn} 改成整三角数列的最小操作数. 输入 第一行,输入一个整数 n 2 ≤ n ≤ 10^5n为偶数 第二行,输入 n 个整数,代表b1b2……bn1 ≤ bi ≤ 10^5 输出 输出一行,一个整数,代表最小操作数 样例输入
4
1 1 2 2样例输出
2提示 两次操作将数列改为{1212},此时符合通项公式 bi12cos(πi)32b_i\frac{1}{2}\cos \left( \pi i \right) \frac{3}{2}bi21cos(πi)23 思路乍一看这题已经点开matlab了仔细看题cos(πi)\cos \left( \pi i \right)cos(πi)也就是说它只能是 -1 或者 1 。遍历整个数组统计出出现次数最多和第二多的数用这两个数拟合我们的三角函数。由于A ≠ 0所以不能是整个数组都相等。但还有一种情况是出现最多和第二多的数都同在奇数位或者偶数位目前我除了和99998取min最少就是选两个数拟合函数其他的都变也没有别的方法了倒是稀里糊涂的也能过。
#includebits/stdc.h
using namespace std;
const int N 100010;
int a[N];
int cnt[N];signed main()
{int n;cin n;for(int i 1; i n; i ){scanf(%d, a[i]);cnt[a[i]] ;}int m 0, idx1, idx2;for(int i 1; i N; i ){if(m cnt[i]){m cnt[i];idx1 i;}}cnt[idx1] 0;m 0;for(int i 1; i N; i ){if(m cnt[i]){m cnt[i];idx2 i;}}int cnt1 0, cnt2 0;for(int i 1; i n; i ){if((i 1) a[i] ! idx1){cnt1 ;}else if(!(i 1) a[i] ! idx2) cnt1 ;if((i 1) a[i] ! idx2) cnt2 ;else if(!(i 1) a[i] ! idx1) cnt2 ;}m min(cnt1, cnt2);cout min(m, 99998);return 0;
}问题 I: 简单的大背包
题目描述 你有一个容积为 nnn 的背包。现有两种物品 物品1: 价值为 100010001000 , 体积为 500500500 物品2: 价值为 555 ,体积为 555
每种物品的数量是不限的,请问你的背包可以装到物品价值的总和最大是多少? 输入 输入一个整数 nnn,代表背包容积 (0 ≤ nnn ≤ 10^9) 输出 输出一个整数,代表可以取得的最大价值 样例输入 2022 样例输出 4020 提示 样例解释物品1拿4个物品2拿4个。 思路显然物品1性价比更高在能放下物品1的基础上装满物品1其余装物品2注意背包容量可能无法装满。
#includebits/stdc.h
using namespace std;
typedef long long LL;
const int N 5010;
int g[N][N];int main()
{int v;cin v;cout (LL)(v / 500) * 1000 (v % 500 / 5) * 5; return 0;} 问题 J: 秋风清 秋月明
题目描述 秋风清秋月明 落叶聚还散寒鸦栖复惊。 相思相见知何日此时此夜难为情 这诗叫啥啊 有没有认识的 三五七言 请问 nnn 以内有多少个只由3 5 7构成的数呢 3 5 7都要至少出现一遍哦 输入 输入一个整数 输出 输出一个整数代表符合条件数字的个数 样例输入 575 样例输出 4 提示 符合条件并小于575的有四个数 分别是357 375 537 573 思路这个n的范围从357到n遍历一遍肯定会TLE了。但是3 5 7数应该不多换个思路直接遍历小于等于n的所有3 5 7数。dfs处理所有由 3,57组成的0~n之间的数然后再判断一下是否3 5 7三个数都出现了。但这样会有一个重复的问题比如说我我的n是四位数假设四条dfs语句编号为1 2 3 4我从1-2-3-4和2-3-4-1都是357相当于0357和3570,0不显示。所以用set保证我每个数只被我加了一次。
#includebits/stdc.h
using namespace std;
typedef long long LL;
int len, n;
//不需要集合排序
unordered_set int v;bool check(int n){int f1 0, f2 0, f3 0;while(n){int t n % 10;if(t 3) f1 1;else if(t 5) f2 1;else if(t 7) f3 1;else break;n / 10; }if(f1 f2 f3) return true;return false;
}//递归深度就是我n的位数
void dfs(int cur,int num)
{if(num n) return;//保证所统计的数都小于等于n if(cur len) {if(check(num)) v.insert(num);return;}dfs(cur 1, num);dfs(cur 1, num * 10 3);dfs(cur 1, num * 10 5);dfs(cur 1, num * 10 7);
} int main()
{cin n;int nn n;while(nn){len ;nn / 10;}dfs(0, 0);cout v.size();return 0;
}问题 K: 简单的旅行商
题目描述 我们知道,旅行商问题是一个 NP-Hard 问题,研究的是图中无重复访问点的最短路径。 我们给定一个周长为 C 的圆,在圆上有 n 个节点. 从圆上某一点开始,沿着一个方向行走,在行走距离 ai 后有一个节点 i 你可以沿着圆周,从任意方向行走,这样我们就得到一个环状的无向图。 请你在图中找到一条路径,使得每个节点恰好访问一次,且路径长度最短. 请你输出这个最短路径的长度 输入 输入第一行,两个整数,C, n,分别代表圆的周长以及节点个数. 输入第二行,n个递增的整数 ai ,代表每个节点在圆上的相对位置. (2 C 10^6, 2 n 2*10^5) (0 a1 a2 … an C) 输出 输出一个整数,代表最短路径长度 样例输入
20 3
5 10 15样例输出
10提示
样例中三点的位置关系如图最短的路径是 1-2-3 长度为10
思路把每条路分段段最长的那条不走其他的路走个环
#includebits/stdc.h
using namespace std;
typedef long long LL;int main()
{int C, n;cin C n;int a[n 1];a[0] 0;int m 0, t;for(int i 1; i n; i ){cin a[i];t a[i] - a[i - 1];m max(m, t);}m max(m, C- a[n] a[1]);cout C - m; return 0;
}问题 L: 简单的基环树 样例输入
5 2 4样例输出
5
4
1
0ssn懒得敲题目了
#includebits/stdc.h
using namespace std;
mapint, int mp;
int n, x, y;int main()
{cin n x y;//遍历每个点到自己后面的点的距离for(int i 1; i n; i )for(int j i 1; j n; j ){int d abs(i - x) abs(j - y);int m min(j - i, d 1);mp[m] ; }for(int i 1; i n; i ) cout mp[i] endl;return 0;
}