Educational Codeforces Round 68 (Rated for Div. 2) 7-15

本文分享了作者在Educational Codeforces Round 68比赛中的经历,详细探讨了在Div. 2级别比赛中遇到的问题和细节,特别提到了在B题和C题上遇到的挑战。
摘要由CSDN通过智能技术生成

各种被卡细节,然后掉绿了QAQ

http://codeforces.com/contest/1194/problem/B

​
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;

#define P pair<int,int>
#define in(x) int x;scanf("%d",&x);
#define inL(x) ll x;scanf("%I64d",&x);
#define scL(x) scanf("%I64d",&x);
#define sc(x) scanf("%d",&x);
#define input(A) for(int i=0;i<n;i++)scanf("%I64d",&A[i]);
char A[400005];
int n,m;
int B[50005];
int C[50005];
char T[50005];
/*bool check()
{

    {
        bool f=1,g=1;
        for(int i=0; i<n; i++)
        {
            f=1;
            for(int j=0; j<m; j++)
            {
                if(A[i*m+j]!='*')
                {
                    f=0;
                    break;
                }
            }
            if(f)break;
        }
        for(int j=0; j<m; j++)
        {
            g=1;
            for(int i=0; i<n; i++)
            {
                if(A[i*m+j]!='*')
                {
                    g=0;
                    break;
                }
            }
            if(g)break;
        }
        return (f&&g);
    }

}*/
int cal()
{
    int t=0;
    int ans=0;
    for(int i=0; i<n; i++)
    {
        for(int j=0; j<m; j++)
        {
            if(A[i*m+j]=='*')B[i]++;

        }
        t=max(t,B[i]);

    }
    int t1=0;
    ans=m-t;
    for(int i=0; i<n; i++)
    {
        if(t1==n)break;
        if(B[i]==t)
        {
            for(int j=0; j<m; j++)
            {
                T[j]=A[i*m+j];
                A[i*m+j]='*';
            }
            for(int j=0; j<m; j++)
            {
                C[j]=0;
                for(int i=0; i<n; i++)
                {
                    if(A[i*m+j]=='*')C[j]++;
                }
                t1=max(t1,C[j]);
            }
            for(int j=0; j<m; j++)
            {
                A[i*m+j]=T[j];

            }
        }


    }


    ans+=n-t1;
    return ans;


}
int main()
{
    in(q);
    while(q--)
    {
        sc(n);
        sc(m);
        for(int i=0; i<n; i++)
        {
            getchar();
            for(int j=0; j<m; j++)
            {
                A[i*m+j]=getchar();
                //cout<<A[i*n+j];

            }
            //cout<<'\n';
        }

        {
            for(int i=0; i<n; i++)B[i]=0;
            for(int i=0; i<m; i++)C[i]=0;
            cout<<cal()<<'\n';
        }
    }

}

​

http://codeforces.com/contest/1194/problem/C

#include<bits/stdc++.h>
using namespace std;
//int A[105];
int B[27];
int main()
{
    int q;
    scanf("%d",&q);
    string s,t,p;
    while(q--)
    {
        //memset(A,0,sizeof A);
        memset(B,0,sizeof B);
        cin>>s>>t>>p;
        int x=s.length();
        int y=t.length();
        int j=0;
        bool f=0;
        for(int i=0; i<x; i++)
        {
            while(s[i]!=t[j])
            {
                j++;
                //cout<<j<<endl;
                if(j>=y)
                {
                    // cout<<i<<j<<endl;
                    puts("NO");
                    f=1;
                    break;
                }


            }
            if(f)break;
            //  A[j]=1;
            j++;
        }
        if(f)continue;
        for(int i=0; i<x; i++)
        {
            B[s[i]-'a']++;
        }
        x=p.length();
        for(int i=0; i<x; i++)
        {
            B[p[i]-'a']++;
        }
        for(int i=0; i<y; i++)
        {

            if(B[t[i]-'a']<=0)
            {

                puts("NO");
                f=1;
                break;
            }
            B[t[i]-'a']--;
        }

        if(!f)puts("YES");
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值