Codeforces Round #735 (Div. 2)

Codeforces Round #735 (Div. 2)

A. Cherry

枚举相邻两个数即可。
容易想到,对于一个长度大于2的区间\([l, r]\),设其中最大值为\(a_i\),不妨另i<r。易知\(min(a_t)*a_i<=a_i*(a_{i+1}), (l<=t<=r)\),所以只需要枚举长度为二的区间即可即相邻两个数即可。

#include<bits/stdc++.h>
using namespace std;
#define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pr;
const ll MAXN=1e18;
const int MOD=1e6;

int main(){
    int t,n;
    cin>>t;
    while(t--){
        cin>>n;
        ll pre,nex,ans=0;
        cin>>pre;
        for(int i=2;i<=n;++i){
            cin>>nex;
            ans=max(ans,nex*pre);
            pre=nex;
        }
        cout<<ans<<'\n';
    }
    return 0;
}

B. Cobb

考虑到\(k*(a_i|a_j)\)的值相对于\(n*n\)很小,所以只要枚举最后一段区间即可,我是枚举\(200*200\)

#include<bits/stdc++.h>
using namespace std;
#define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pr;
const ll MAXN=1e18;
const int MOD=1e6;

ll aa[100005],nex[100005];

void solve(){
    int n;
    ll k;
    cin>>n>>k;
    for(int i=1;i<=n;++i){
        cin>>aa[i];
    }
    ll ans=-2e18;
    for(int i=max(1,n-200+1);i<=n;++i){
        for(int j=i+1;j<=n;++j){
            ans=max(ans,(ll)i*j-k*(aa[i]|aa[j]));
        }
    }
    cout<<ans<<'\n';
}

int main(){
    IOS;
    int t;
    cin>>t;
    while(t--)
        solve();
}

C. Mikasa

如果\(k=n⨁x, 即k⨁n=x, x∈[0, m],\) 那么k就存在序列中
也就是说如果\(0<=k⨁n<=m\),那么k就存在于序列中。
我们要找到最小的\(k\)不满足\(0<=k⨁n<=m\)即最小的k满足\(k⨁n>=m+1\)
看了这位dalao的博客https://www.cnblogs.com/Tenshi/p/15078889.html

#include<bits/stdc++.h>
using namespace std;
#define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pr;
const ll MAXN=1e18;
const int MOD=1e6;

int main(){
    int t;
    cin>>t;
    while(t--){
        int n,m;
        scanf("%d%d", &n, &m);
        ++m;
        int ans=0;
        if(n>=m) {
            printf("0\n");
            continue;
        }
        else{
            for(int i=29;i>=0;--i){
                int w=(n>>i)&1,k=(m>>i)&1;
                if(w==k) continue;
                else{
                    if(k==1){
                        ans+=1<<i;     
                    }
                    else break;
                }
            }
        }
        printf("%d\n", ans);
    }
    return 0;
}

D. Diane

构造,我的话长度小于等于3特判一下。
大于3,如果为偶数,就形如aaabaaaa
如果为奇数,就形如aaabcaa。
b与bc起分割作用,这种构造方法保证左右两边只含a的等长子串数目加起来正好是奇数。

#include<bits/stdc++.h>
using namespace std;
#define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pr;
const ll MAXN=1e18;
const int MOD=1e6;

void solve(){
    int n;
    scanf("%d", &n);
    if(n==1) puts("a");
    else if(n==2) puts("ab");
    else if(n==3) puts("abc");
    else{
        if(n&1){
            for(int i=1;i<=n/2-1;++i) putchar('a');
            putchar('b');
            putchar('c');
            for(int i=1;i<=n/2;++i) putchar('a');
            puts("");
        }
        else{
            for(int i=1;i<=n/2;++i) putchar('a');
            putchar('b');
            for(int i=1;i<=n/2-1;++i) putchar('a');
            puts("");
        }
    }
}

int main(){
    int t;
    scanf("%d", &t);
    while(t--)
        solve();
    return 0;
}
posted @ 2021-07-30 15:45  七铭的魔法师  阅读(71)  评论(0编辑  收藏  举报