- 孔子丹 的博客
7.12
- @ 2024-7-12 20:37:28
T1小田的最大价值
思路:
先从小到大排序,选择最后一个和倒数第二进行比较,让最大的和排序完的数组的第一个进行减法,让后和k比较;
关键代码:
if(abs(a[n]-a[1])>k)cout<<a[n];
else cout<<a[n-1];
输入 #1
5 3
1 2 3 4 5
输出 #1
5
解释:因为5-1=4,4比3大,输出5;
T2小田的交换数字
思路:
两个数字的总和不变时; 通过交换,使得一个到最大值,一个最小值。 要让a最大,b最小; b[i]>a[i] swap(a[i],b[i]) 关键点:同余定理 (a+b%x==(a%x+b%x)%x (a×b%x==(a%x×b%x)%x
输入 #1
3
159
586
输出 #1
91884
交换个位,因为156×589=91884,最大。
代码:
for(int i=0;i<n;i++){
if(b[i]>a[i])
swap(a[i],b[i]);
}
for(int i=0;i<n;i++){
num=(num*10+a[i]-'0')%mod;
ans=(ans*10+b[i]-'0')%mod;
}
cout<<(num%mod*ans%mod)%mod;
T6检查总结
思路: dp[i]表示最少需要几步才能把i到n这些数字变成合法; 对于dp[i]; 删:dp[]