2021暑假每日一题 week2 完结

Posted 辉小歌

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2021暑假每日一题 week2 完结相关的知识,希望对你有一定的参考价值。

3763. 数字矩阵 【难度: 一般 / 知识点: 思维】


#include<bits/stdc++.h>
using namespace std;
int a[105][105],n,m;
int main(void)
{
    int t; cin>>t;
    while(t--)
    {
        cin>>n>>m;
        int cnt=0,sum=0,t=1e9;
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<m;j++)
            {
                cin>>a[i][j];
                if(a[i][j]<0) cnt++;
                sum+=abs(a[i][j]);
                t=min(t,abs(a[i][j]));
            }
        }
        if(cnt%2==0) cout<<sum<<endl;
        else cout<<sum-abs(t)*2<<endl;
    }
    return 0;
}

3764. 三元数异或 【难度: 一般 / 知识点: 思维 贪心】


我们要让这俩数尽可能的平均,这样最大值才会尽可能的小。
如果是2就平分,如果是1那么给其中的一个,剩下的所有的数都给另一个即可。

#include<bits/stdc++.h>
using namespace std;
int main(void)
{
    int t; cin>>t;
    while(t--)
    {
        int n; cin>>n;
        string x; cin>>x;
        string a,b;
        int index=99999999;
        for(int i=0;i<x.size();i++) 
        {
            if(x[i]=='2') a+='1',b+='1';
            if(x[i]=='0') a+='0',b+='0';
            if(x[i]=='1')
            {
                a+="1";
                b+='0';
                index=i+1;
                break;
            }
        }
        while(a.size()<n) a+='0';
        for(int i=index;i<x.size();i++) b+=x[i];
        cout<<a<<endl<<b<<endl;
    }
    return 0;
}

3767. 最小的值 【难度: 一般 / 思维: 贪心 枚举】

#include<bits/stdc++.h>
using namespace std;
const int N=1e4+10;
int a[N],b[N];
int main(void)
{
    int n; cin>>n;
    int t=-1;
    int sum=0;
    for(int i=0;i<n;i++) cin>>a[i];
    for(int i=0;i<n;i++) cin>>b[i];
    for(int i=1;i<=100000;i++)//枚举答案
    {
        int sum=0;
        for(int j=0;j<n;j++)
        {
            if(a[j]>=b[j]) sum+=(a[j]-b[j])*i;
            else sum-=b[j]-a[j];
        }
        if(sum>0)//合法
        {
            cout<<i<<endl;
            return 0;
        }
    }
    cout<<-1<<endl;
    return 0;
}

3768. 字符串删减【难度: 简单 / 知识点: 模拟】

#include<bits/stdc++.h>
using namespace std;
int main(void)
{
    int n; cin>>n;
    string s; cin>>s;
    int ans=0;
    int cnt=0;
    for(int i=0;i<s.size();i++)
    {
        if(s[i]=='x') cnt++;
        else cnt=0;
        if(cnt>=3) ans++;
    }
    cout<<ans<<endl;
    return 0;
}

3769. 移动石子 【难度: 简单 / 知识点: 贪心】

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int a[N],n,t,d;
int main(void)
{
    cin>>t;
    while(t--)
    {
        cin>>n>>d;
        for(int i=0;i<n;i++) cin>>a[i];
        int sum=a[0];
        for(int i=1;i<n;i++)
        {
            if(a[i])
            {
                if(a[i]*i<d) sum+=a[i],d-=a[i]*i;
                else 
                {
                    sum+=d/i;
                    break;
                }
            }
        }
        cout<<sum<<endl;
    }
    return 0;
}

以上是关于2021暑假每日一题 week2 完结的主要内容,如果未能解决你的问题,请参考以下文章

2021夏季每日一题 week2 未完结

2021暑假每日一题 week5 完结

2021暑假每日一题 week9 完结

2021暑假每日一题 week1 完结

2021暑假每日一题 week6 完结

2021暑假每日一题 week4 完结