长度为n的数组a(数[1,1e9])n大于等于2
重新排列数组a,使得ai-ai-1的和最大
问最大是多少
后一个减去前一个,升序,总的和就是最大的减最小的
#include<bits/stdc++.h>
#define endl '\n'
#define int long long
using namespace std;
const int N=110;
int a[N];
int n;
void solve() {
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
sort(a+1,a+1+n);
cout<<a[n]-a[1]<<endl;
}
signed main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int t=1;
cin>>t;
while(t--) {
solve();
}
return 0;
}
n * n的矩阵,给一些单元格着色,至少让k条对角线上,每条对角线上有一种颜色
最多有4*n-2条对角线
问最少涂几种颜色
操作性问题,对单元格进行操作,那么操作对象最小基本单元为单元格,就专注于一个单元格
发现第一行的n个都能产生2条对角线,然后最后一行除了首尾均能产生两条对角线,首尾均产生一条对角线
所以如果对角线条数小于等于(n+n-2)*2,那么是一个单元格产生两条对角线,超过的,1个单元格产生一条对角线
#include<bits/stdc++.h>
#define endl '\n'
#define int long long
using namespace std;
int n,k;
void solve() {
cin>>n>>k;
if(k<=2*(n+n-2)) cout<<k/2+(k%2!=0)<<endl;
else{
int ans=0;
ans+=n+n-2;
k-=2*(n+n-2);
ans+=k;
cout<<ans<<endl;
}
}
signed main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int t=1;
cin>>t;
while(t--) {
solve();
}
return 0;
}
进行投注,下注y个硬币,如果赢了,那么变成y*k,如果输了就失去本金
最多连续输x次
最初有a硬币
问能否财富自由
考虑最坏的结果,连续输x次,然后赢一次
如果连续输了x次,那么可以放一个很大的数,把钱都赚回来,但是它赢一次输一次,这样无法确定什么时候赢,就不敢乱下注
不能让你凑成x次
第一次先投1,试探一下,如果赢了,那就相当于重新开始
如果输了,下次我们投那种我们赢了就可以赚的,这样它就只能让我们输,我们就靠这种方法逼它让我们输,一直输到连续x次,如果我们还有本金还可以赢的比最初的多,那么YES(不包括和最初的本金相等),否则NO
#include<bits/stdc++.h>
#define endl '\n'
#define int long long
using namespace std;
int k,x,a;
void solve() {
cin>>k>>x>>a;
int b=a;
b--;//本金还剩多少
int sum=1;//共花了多少
for(int i=2;i<=x;i++){
int l=0,r=1e9;
while(l<r){
int mid=(l+r)/2;
if((k-1)*mid>sum) r=mid;
else l=mid+1;
}
if(b<=l){
cout<<"NO"<<endl;
return;
}
sum+=l;
b-=l;
}
if(b*k>a) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
signed main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int t=1;
cin>>t;
while(t--) {
solve();
}
return 0;
}