此中,⌊⌋ 表现向下取整。例如,⌊3.7⌋=3,⌊5.2⌋=5。
计算出 A′、B′、C′ 后,同时更新:A 变为 A′,B 变为 B′,C 变为 C′,作为下一年调整的基础。
三兄弟认为这个方法能均衡产值波动,于是计划一连执行 K 次调整。现在,请你帮他们计算,经过 K 次调整后,金矿、银矿和铜矿的产值分别是多少。
输入格式
输入的第一行包罗一个整数 T,表现测试用例的数目。
接下来的 T 行,每行包罗四个整数 A,B,C,K,分别表现金矿、银矿和铜矿的初始产值,以及需要执行的调整次数。
输出格式
对于每个测试用例,输出一行,包罗三个整数,表现经过 K 次调整后金矿、银矿和铜矿的产值,用空格分隔。
输入输出样例
输入 #1复制
2
10 20 30 1
5 5 5 3
复制代码
输出 #1复制
25 20 15
5 5 5
复制代码
阐明/提示
评测用例规模与约定
对于 30% 的评测用例,1≤T≤100,1≤A,B,C,K≤1e5。
对于 100% 的评测用例,1≤T≤1e5,1≤A,B,C,K≤1e9。
可以看出肯定会有循环,一直模拟直到k或者中途有循环跳出
#include <bits/stdc++.h>
using namespace std;
//#define int long long
#define endl '\n'
using u32 = unsigned;
using i64 = long long;
using u64 = unsigned long long;
using PII = pair<int,int>;
const int N=1e5+5;
struct node{
int a, b, c;
bool operator < (const node& other) const {
if (a != other.a) return a < other.a;
if (b != other.b) return b < other.b;
return c < other.c;
}
};
void solve() {
int a, b, c, k;
cin >> a >> b >> c >> k;
set<node> se;
auto d = node{a, b, c};
se.insert(d);
int a1, b1, c1;
int cnt=0;
while (cnt++<k) {
int s1 = se.size();
a1 = (b + c) / 2;
b1 = (a + c) / 2;
c1 = (a + b) / 2;
se.insert(node{a1, b1, c1});
if ((int)se.size() == s1) break;
a = a1, b = b1, c = c1;
}
cout << a << ' ' << b << ' ' << c << endl;
}
signed main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int t;
cin >> t;
while (t--)
solve();
return 0;
}
复制代码
P12134 [蓝桥杯 2025 省 B] 画展部署 - 洛谷
画展策展人小蓝和助理小桥为即将举办的画展准备了 N 幅画作,其艺术价值分别为 A1,A2,…,AN。他们需要从这 N 幅画中挑选 M 幅,并按照肯定顺序部署在展厅的 M 个位置上。如果随意挑选和分列,艺术价值的变化可能会过于突兀,导致观众的观展体验不敷流畅。
为了优化部署,他们查阅了《画展部署指南》。指南指出,理想的画展应使观众在欣赏画作时,艺术价值的过渡只管平缓。指南发起,选择并分列 M 幅画,应使艺术价值的变化程度通过一个数值 L 来权衡,且该值越小越好。数值 L 的界说为:
此中 Bi 表现展厅第 i 个位置上画作的艺术价值。
现在,他们盼望通过精心挑选和分列这 M 幅画作,使 L 到达最小值,以提升画展的整体和谐性。请你帮他们计算出这个最小值是多少。
输入格式
输入共两行。
第一行包罗两个正整数 N 和 M,分别表现画作的总数和需要挑选的画作数目。
第二行包罗 N 个正整数 A1,A2,…,AN,表现每幅画作的艺术价值。
输出格式
输出一个整数,表现 L 的最小值。
输入输出样例
输入 #1复制
4 2
1 5 2 4
复制代码
输出 #1复制
3
复制代码
阐明/提示
评测用例规模与约定
对于 40% 的评测用例,2≤M≤N≤1e3,1≤Ai≤1e3。
对于 100% 的评测用例,2≤M≤N≤1e5,1≤Ai≤1e5。
从小到大排序,然后实验所有选一连m个的方式,双指针
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
using u32 = unsigned;
using i64 = long long;
using u64 = unsigned long long;
using PII = pair<int,int>;
const int N=1e5+5;
void solve() {
int n,m;
cin>>n>>m;
vector<int>a(n);
for(int i=0;i<n;i++){
cin>>a[i];
}
sort(a.begin(),a.end());
int sum=0;
for(int i=0;i<m-1;i++){
sum+=a[i+1]*a[i+1]-a[i]*a[i];
}
int ans=sum;
for(int i=0,j=m-1;j<n-1;i++,j++){
sum-=a[i+1]*a[i+1]-a[i]*a[i];
sum+=a[j+1]*a[j+1]-a[j]*a[j];
//cout<<sum<<endl;
ans=min(ans,sum);
}
cout<<ans;
}
signed main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
solve();
return 0;
}
复制代码
P12135 [蓝桥杯 2025 省 B] 水质检测 - 洛谷
小明需要在一条 2×n 的河床上铺设水质检测器。在他铺设之前,河床上已经存在一些检测器。如果两个检测器上下或者左右相邻,那么这两个检测器就是互相连通的。连通具有通报性,即如果 A 和 B 连通,B 和 C 连通,那么 A 和 C 也连通。现在他需要在河床上增加铺设一些检测器使得所有的检测器都互相连通。他想知道最少需要增加铺设多少个检测器?
输入格式