Codeforces Round 890 (Div. 2) supported by Constructor Institute

把c题目做出来了,但是前两个题目用的时间太长了,必须保证15分钟之内做完两个题目,这样就能保证上分了,抓住关键
![在这里插入图片描述](https://img-blog.csdnimg.cn/176d81cc5e05422b96d6b9d61194ffd3.png

B题意:
这个题目自己做的非常完美:
完美的原因在于我自己找到了问题关键所在的地方,太棒了真的是:这感觉真的很舒服 :
这个题目的关键是:真正有影响的是1,1要是改变必须增加,所有有一个必须减少,但是减少的话你得保证能减少,也就是这个数字本身是大于1的,所以看看1的个数和所有大于1的值加起来看看是不是一样
A题意:
lphen可以执行以下操作:
对于从1到n的所有i,将ai替换为max(0, ai−1)。
Alphen将执行上述操作,直到a被排序,即a满足a1≤a2≤…≤an。在问题的约束条件下,可以证明Alphen会执行有限次操作。

:这个题目没有啥:做法比较容易:

#include
using namespace std;

const int maxn = 60;

int a[maxn];

int main(){
    int t;
    cin >> t;
    while(t--){
        int n; cin >> n;
        for(int i=1;i<=n;i++){
            cin >> a[i]; 
        }
        int ans = 0;
        for(int i=1;i<=n;i++){
            for(int j=i+1;j<=n;j++){
                if(a[i] > a[j]) ans = max(ans,a[i]);
            }
        }
        cout<

#include
using namespace std;

const int maxn = 102000;

int a[maxn],n,k;

int divide(int l,int r){
if(l == r) return l;
int mid = (l+r+1)/2;
int ok = 0;
for(int i=1;i<=n;i++){
int now = mid;
long long tms = 0;
int flag = 0;
for(int j=i;j<=n;j++,now–){
if(a[j] >= now) {flag = 1;break;}
else{
tms += now-a[j];
}
}
if(flag == 1 && tms <= k) ok = 1;
}
if(ok) return divide(mid,r);
else return divide(l,mid-1);
}

int main(){
int t;
cin >> t;
while(t–){
cin >> n >> k;
for(int i=1;i<=n;i++) cin >> a[i];
int maxx = 0;
for(int i=1;i<=n;i++) maxx = max(maxx,a[i]);
cout< }
return 0;
}

你可能感兴趣的:(算法,数据结构)