A
用python写的
s=eval(input())
print(s)
B
要满足条件则最大和最小一定要呈对角分布
C
n最大才40,则最多加8个不同的值
判断:当还剩下的可选值小于等于n,就可以继续增加
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define INF 0x3f3f3f3f
typedef pair<int, int> PII;
const int N=1e3+10;
const ll mod=1e9+7;
int a[N];int b[10];
int t,n,k,ans,l,r;
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin>>t;
b[0]=0,b[1]=0;
for(int i=1;i<=9;i++){
b[i]=i;
}
while(t--){
cin>>k>>n;
int cnt=k;a[0]=1;a[1]=1;
for(int i=1;i<=cnt;i++){
if(n-a[i-1]-b[i-1]>=cnt-i&&i<10)a[i]=a[i-1]+b[i-1];
else a[i]=a[i-1]+1;
//cout<<a[i]<<" I:"<<i<<endl;
}//a[cnt]=n;
for(int i=1;i<=k;i++){
cout<<a[i]<<" ";
}
cout<<endl;
}
}
D
两两确定一个取值的限度,每增加一个数字就与可选区间做交集
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define INF 0x3f3f3f3f
typedef pair<int, int> PII;
const int N=2e5+10;
const ll mod=1e9+7;
ll a[N];
int t,n,k,ans ;
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin>>t;
while(t--){
cin>>n;int l=0,r=INF;
for(int i=0;i<n;i++)cin>>a[i];
for(int i=1;i<n;i++){
if(a[i-1]>a[i]){
l=max(l, (int)(a[i-1]+a[i]+1)/2);
}
else if(a[i-1]<a[i]){
r=min(r, (int)(a[i-1]+a[i])/2);
}
}
if(r<l)cout<<-1<<endl;
else cout<<(ll)l<<endl;
}
}