首页 > 其他分享 >hey_left 5 Codeforces Round 898 (Div. 4)

hey_left 5 Codeforces Round 898 (Div. 4)

时间:2024-01-17 19:46:37浏览次数:44  
标签:898 Codeforces long hey int solve -- left

题目链接

A.

一次交换,最多让两个字符归位
若三个字符都不在该在的位置上,那么无法完成
若有一个字符在该在的位置上,那么可以完成

using namespace std;

void solve(){
    char a,b,c;cin>>a>>b>>c;
    if(a=='a'||b=='b'||c=='c'){
        cout<<"YES"<<'\n';
    }else cout<<"NO"<<'\n';
}

signed main(){
    int hey_left=1;
    cin>>hey_left;
    while(hey_left--){
        solve();
    }
}

B.

记录一个前缀乘积和后缀乘积
再遍历一遍,前缀乘积后缀乘积(当前数+1)
取最大即可

#include <bits/stdc++.h>
using namespace std;

int a[15],b[15],c[15];
void solve(){
    int n;cin>>n;
    b[0]=1;
    for(int i=1;i<=n;i++){
        cin>>a[i];
        b[i]=a[i]*b[i-1];
    }
    c[n+1]=1;
    for(int i=n;i>=1;i--)c[i]=a[i]*c[i+1];
    int ma=-0x3f3f3f3f;
    for(int i=1;i<=n;i++){
        ma=max(ma,b[i-1]*c[i+1]*(a[i]+1));
    }
    cout<<ma<<'\n';
}

signed main(){
    int hey_left=1;
    cin>>hey_left;
    while(hey_left--){
        solve();
    }
}

C.

计分板是固定的,打算把计分板记录到一个二维数组里
然后输入的位置如果是'X',直接加上计分板相应位置的积分

#include <bits/stdc++.h>
using namespace std;

int st[15][15];

void solve(){
    char c;
    int sum=0;
    for(int i=1;i<=10;i++){
        for(int j=1;j<=10;j++){
            cin>>c;
            if(c=='X')sum+=st[i][j];
        }
    }
    cout<<sum<<'\n';
}

signed main(){

    for(int i=1;i<=5;i++){
        for(int j=i;j<=10-i+1;j++){
            st[i][j]=i;
        }
    }
    for(int i=1;i<=5;i++){
        for(int j=i;j<=10-i+1;j++){
            st[j][i]=i;
            st[j][10-i+1]=i;
        }
    }
    for(int i=6,k=1;i<=10;i++,k+=2){
        for(int j=1;j<=10;j++){
            st[i][j]=st[i-k][j];
        }
    }
    int hey_left=1;
    cin>>hey_left;
    while(hey_left--){
        solve();
    }
}

D.

遍历字符串,若当前字符是'B',答案+1,然后跳过遍历位置+k(这一段都变成白色了)

#include <bits/stdc++.h>
using namespace std;

void solve(){
    int n,k;cin>>n>>k;
    string s;cin>>s;
    int ans=0;
    for(int i=0;i<s.size();){
        if(s[i]=='W'){
            i++;continue;
        }
        ans++;
        i+=k;
    }
    cout<<ans<<'\n';
}

signed main(){
    int hey_left=1;
    cin>>hey_left;
    while(hey_left--){
        solve();
    }
}

E.

这道题数据非常强,因为题目里没有规定h的上限,必须要unsigned long long
然后比较最大值时ma!=-1了,因为unsigned long long 没有负数,初始化负数会出现一个非常大的数
ma初始化为0就好了,因为这个wa了好多好多发

#include <bits/stdc++.h>
using namespace std;

#define int unsigned long long
const int N=2e5+10;
int a[N];
void solve(){
    int n,x;cin>>n>>x;
    for(int i=1;i<=n;i++){
        cin>>a[i];
    }
    sort(a+1,a+1+n);
    int l=1,r=1e18+10,mid;
    int sum;
    int ma=0;
    while(l<=r){
        sum=0;
        mid=(l+r)/2;
        for(int i=1;i<=n;i++){
            if(a[i]>mid)break;
            sum+=mid-a[i];
        }
        if(sum<=x){
            l=mid+1;
            ma=max(ma,mid);
        }
        else r=mid-1;
    }
    cout<<r<<'\n';
}

signed main(){
    int hey_left=1;
    cin>>hey_left;
    while(hey_left--){
        solve();
    }
}

标签:898,Codeforces,long,hey,int,solve,--,left
From: https://www.cnblogs.com/wwww-/p/17968129

相关文章

  • hey_left 4 Codeforces Round 898 (Div. 4) 续
    题目链接F.先把序列分割成一个个满足条件的子序列然后二分长度,去判断子序列是否满足长度,若有一个满足,这个答案可行,判断更长的长度debug:存下的子序列忽略了单个元素,单个元素也是一个子序列,把每个元素单独作为一个子序列后可以ac题解有更简单的做法,双指针,直接遍历一遍得到答案......
  • Codeforces Round 920 (Div. 3)补题D~F
    CodeforcesRound920(Div.3)D.思路取a最大和c最小的或c最小和a最大的匹配ac代码#include<bits/stdc++.h>usingnamespacestd;usingi64=longlong;consti64inf=8e18;typedefpair<int,int>pii;constintmod=1e9+7;constintN=2e6+10;voidso......
  • Codeforces Round 861 (Div. 2)
    CodeforcesRound861(Div.2)C题直接数位dp即可#include<cstdio>#include<algorithm>#include<cstring>#include<map>#include<queue>#include<bitset>#include<cmath>#include<set>#include<unordered_map>#def......
  • Codeforces Round 920 (Div. 3)
    CodeforcesRound920(Div.3)A-Square#include<bits/stdc++.h>#defineendl'\n'#defineintlonglongusingnamespacestd;constintN=5e5+10;voidsolve(){ map<int,int>x; map<int,int>y; ......
  • Codeforces Round 920 (Div. 3)
    目录写在前面ABCDEFG写在最后写在前面比赛地址:https://codeforces.com/contest/1921写完C题去泡了个面边吃边看D,吃着吃着不对劲味儿怎么这么冲一看过期两个月了我草以及div3都AK不了了呃呃博弈论把我鲨了还剩最后一门近代史,周四才考,开摆!感觉除了离散可能有点拉其他都......
  • Codeforces Round 920 (Div. 3)
    基本情况A、C秒的很快。B、D都错了一发才过。E博弈论属于是短板。E.EattheChipProblem-E-Codeforces首先考虑谁可能赢。因为\(Alice\)只能向下,\(Bob\)只能向上,而\(Alice\)先手。显然两者行差为奇数时\(Alice\)有可能赢,偶数时\(Bob\)有可能赢。再考虑平......
  • Codeforces Round 920 (Div. 3) D Very Different Array
    DVeryDifferentArray题意给出两个长度分别为\(n,m\)的数组\(a,c\),\(n<m\),从\(c\)中选择\(n\)个数并找到一个序列使得\(D=\sum_{i=1}^{n}|a_i-c_i|\)尽可能大,求D的值思路假设如果\(m\)和\(n\)一样大,那么找到这个序列的方法很简单:将两个序列分别排序后将其中一个转置,......
  • hey_left 3 Codeforces Round 918 (Div. 4) 再续
    题目链接F.找了些题解,但都看的不是很懂先去又梳理了一遍堆优化版的dij每次用当前可到达的最小的边去进行松弛操作标记数组,若该点已经加入确定点集,就跳过别忘了dist[]数组初始化为无穷大,这样才会全部都被更新#definelllonglongconstintinf=0x3f3f3f3f;constintN=1e......
  • CodeForces 1500C Matrix Sorting
    洛谷传送门CF传送门做了好久。怎么会是呢。题目的操作可以看成,求出一些关键字,使得\(B\)矩阵的行是由\(A\)按照这些第\(1\)关键字、第\(2\)关键字一直到第\(k\)关键字,最后还有一个原来所在行下标的关键字,从小到大排序。肯定是从排好序的\(B\)矩阵入手。首先任意找......
  • CodeForces 1266F Almost Same Distance
    洛谷传送门CF传送门好厉害。特判\(k=1\)。首先经过观察,我们可以按照\(k\)的奇偶性讨论:\(k\)为偶数,有一个中心点挂了若干条长度为\(\frac{k}{2}\)的链。\(k\)为偶数,有两个中心点,两边挂了若干条长度为\(\frac{k}{2}\)的链;\(k\)为奇数,有一个中心点挂了若干条长度......