Codeforces Round #619 (Div. 2)(A~D)

体验真的是差…主站崩了…
AB就基本没什么可说的了,直接看代码就行

A. Three Strings

#include<bits/stdc++.h>
using namespace std;
const int N=100010;
int main()
{
	string a,b,c;
	int t;
	cin>>t;
	
	while(t--)
	{
		cin>>a>>b>>c;
		bool flag=1;
		for(int i=0;i<a.size();i++)
			if(c[i]!=a[i]&&c[i]!=b[i])
				{
					flag=0;
					break;
				}
		if(flag==1) 
			cout<<"YES"<<endl;
		else 
			cout<<"NO"<<endl;
	}
	return 0;
}

B. Motarack’s Birthday

#include<bits/stdc++.h>
using namespace std;
const int N=100010;
int n,s[N];
int main()
{
	string a,b,c;
	int t;
	cin>>t;
	while(t--)
	{
		cin>>n;
		int mn=0x3f3f3f3f,mx=0;
		for(int i=0;i<n;i++)
			cin>>s[i];
		int m=0,k;
		for(int i=0;i<n;i++)
		{
			if(s[i]==-1)
			{
				if(i>0&&s[i-1]!=-1) 
				{
					mn=min(s[i-1],mn);
					mx=max(s[i-1],mx);
				}
				if(i<n-1&&s[i+1]!=-1)
				{
					mn=min(s[i+1],mn);
					mx=max(s[i+1],mx);
				}
			}
			if(i&&s[i]!=-1&&s[i-1]!=-1) m=max(m,abs(s[i]-s[i-1])); 
		}
		if(mn==0x3f3f3f3f) 
			m=0,k=0;
		else
		{
			k=(mx+mn)/2;
			m=max(max(mx-k,k-mn),m);
		}
		cout<<m<<' '<<k<<endl;
	}
	
	return 0;
}

C. Ayoub’s function

想要求子串含有1,可以求出所有的情况减去子串只含有0的情况,所以只要让0均匀的分布在1里面,因为有m个1,所有最多有m+1个区间去放0. 所以这m+1个区间中有m+1-b个区间放a个,有b个区间放a+1个,再用求和公式乘一下,a,b的含义入代码所示。

#include<bits/stdc++.h>
using namespace std;
typedef  long long ll;
const int N=100010;
int t;
ll n,m;
int main()
{
	cin>>t;
	while(t--)
	{
		cin>>n>>m;
		ll k=n-m,ans=(n+1)*n/2;
		ll a=k/(m+1);
		ll b=k%(m+1);
		ans-=(((a+1)*a/2)*(m+1-b));
		ans-=(((a+2)*(a+1)/2)*b);
		cout<<ans<<endl;
	}
	return 0;
}

D. Time to Run

扎心,自己写的代码别人看不懂…其实思路都一样,上午懒得敲了晚上还得敲…
就是从所站的位置先走向最右边,在走回最左边,然后向下走一步,重复此操作,知道走完n-1行,走完n-1行后再向右走m个单位,然后再向上走向下走,向左走一步,一直走完…
注意判断n=1或者m=1的情况…
下面是卿姐的代码…

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int N=1e6+10;
vector<pair<int,string> >v,ans;

int main()
{
    int n,m,k;  cin>>n>>m>>k;
    for(int i=0;i<n-1;i++)
    {
        if(m-1!=0)
        {
            v.push_back({m-1,"R"});
            v.push_back({m-1,"L"});
        }
        v.push_back({1,"D"});
    }
    if(m-1!=0)
        v.push_back({m-1,"R"});

    for(int i=0;i<m-1;i++)
    {
        if(n-1!=0)
        {
            v.push_back({n-1,"U"});
            v.push_back({n-1,"D"});
        }
        v.push_back({1,"L"});
    }
    if(n-1!=0)
        v.push_back({n-1,"U"});

    for(int i=0;i<v.size();i++)
    {
        if(k>=v[i].first)
        {
            k-=v[i].first;
            ans.push_back(v[i]);
        }
        else if(k!=0&&v[i].first>k)
        {
            ans.push_back({k,v[i].second});
            k=0;
        }
    }
    if(k>0)
        cout<<"NO"<<endl;
    else
    {
        cout<<"YES"<<endl;
        cout<<ans.size()<<endl;
        for(int i=0;i<ans.size();i++)
            cout<<ans[i].first<<" "<<ans[i].second<<endl;
    }
    return 0;
}

常规操作,EF就算了…2333

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值