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[]