A. X Axis
题意:在一条x轴上给定三个点,找到一个点,使得: ∑ i = 1 3 ∣ x − a i ∣ \sum_{i=1}^{3}|x-ai| ∑i=13∣x−ai∣最大。
解:注意到: 0 < = x < = 10 0<=x<=10 0<=x<=10,故遍历每个点计算即可。
B. Matrix Stabilization
题意:给定一个 n ∗ m n*m n∗m的矩阵,找到某个单元格 ( i , j ) (i,j) (i,j),与它相邻的单元格的值严格小于它的值,然后将该单元格的值一直减小直到不满足严格小于的条件;若有多个这样的单元格,从左到右、从上到下执行。问最后的矩阵如何。
解:若有这样一个单元格,那么这个单元格一定会变成与它相邻的单元格中的最大值。
顺序检查修改即可。
C. Update Queries
题意:给定长度为 n n n的字符串 s s s和 m m m个整数 i n d i ind_{i} indi,其中 i n d i ind_{i} indi对应 s s s中的索引,以及长度为 m m m的字符串 c c c,可以任意排列 i n d ind ind数组,按照顺序执行: s [ i n d i ] = c [ i ] s[ind_{i}]=c[i] s[indi]=c[i],问可以得到字典序最小的字符串 s s s。
解:首先可以对字符串 c c c按照字典序排序,因为 i n d ind ind数组可以任意打乱。字符串 s s s中只有 i n d i ind_{i} indi位置上会改变,按照排序后的字符串依次放入即可。需要注意的是我们需要对 i n d ind ind数组去重,因为存在覆盖关系。
AC代码:
void solve()
{
int n, m; cin >> n >> m;
string s; cin >> s;
vector<int> ind(m);
forn (i, 0, m) cin >> ind[i];
set<int> pos;
forn (i, 0, m) pos.insert(ind[i]);
string c; cin >> c;
sort(all(c)); int cnt = 0;
for(auto i : pos) {
s[i - 1] = c[cnt++];
}
cout << s << endl;
}
D. Mathematical Problem
题意:给定长度为