Codeforces Round #753 (Div. 3) A-E

Posted 辉小歌

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces Round #753 (Div. 3) A-E相关的知识,希望对你有一定的参考价值。

打的烂的一批。

A. Linear Keyboard【简单 /模拟】


https://codeforces.com/contest/1607/problem/A

#include<bits/stdc++.h>
using namespace std;
typedef long long int LL;
const int N=1e5*2+10;
int n,m,t;
int s[N];
int main(void)
{
	int t; cin>>t;
	while(t--)
	{
		string temp; cin>>temp;
		string ss; cin>>ss;
		for(int i=0;i<temp.size();i++) s[temp[i]-'a']=i+1;
		LL ans=0;
		for(int i=1;i<ss.size();i++) ans+=abs(s[ss[i]-'a']-s[ss[i-1]-'a']);
		cout<<ans<<endl;
	}
	return 0;
}

B. Odd Grasshopper【简单 / 找规律】


https://codeforces.com/contest/1607/problem/B

四个为一组,一组的和为0。

#include<bits/stdc++.h>
using namespace std;
typedef long long int LL;
LL t,x,n;
int main(void)
{
	cin>>t;
	while(t--)
	{
		cin>>x>>n;
	    LL cnt=n%4;
	    LL len=n/4;
	   	for(LL i=1,j=len*4+1;i<=cnt;i++,j++)
	   		if(x&1) x+=j;
	   		else x-=j;
	   	cout<<x<<endl;
	}
	return 0;
}

C. Minimum Extraction【一般 / 排序 思维】


https://codeforces.com/contest/1607/problem/C
考试的时候假题了,不过想的方法也是比较垃圾,我是直接用树状数组模拟做的。

#include<bits/stdc++.h>
using namespace std;
typedef long long int LL;
typedef pair<int,int> PII;
const int N=1e5*2+10;
LL t,n,a[N],tr[N];
LL lowbit(LL x){return x&(-x);}
LL add(LL x,LL v){for(int i=x;i<=n;i+=lowbit(i)) tr[i]+=v;}
LL query(int x)
{
    LL sum=0;
    for(int i=x;i;i-=lowbit(i)) sum+=tr[i];
    return sum;
}
int main(void)
{
	cin>>t;
	while(t--)
	{
		cin>>n;
		memset(tr,0,sizeof tr);
		for(int i=1;i<=n;i++) cin>>a[i];
		sort(a+1,a+n+1);
		for(int i=1;i<=n;i++)
		{
			int b=a[i]-a[i-1];
			add(i,b);
		} 
		LL ans=query(1);
		for(int i=1;i<n;i++)
		{
			add(i,-query(i));//后面的数都减去该数 
			ans=max(ans,query(i+1));//取一下当前区间的最小值 
		}
		cout<<ans<<endl;
	}
	return 0;
}

简洁写法

#include<bits/stdc++.h>
using namespace std;
int main(void)
{
	int t; cin>>t;
	while(t--)
	{
		int n,x; cin>>n;
		vector<int>ve;
		for(int i=0;i<n;i++) cin>>x,ve.push_back(x);
		sort(ve.begin(),ve.end());
		int sum=0,ans=-1e9;
		for(int i=0;i<ve.size();i++)
		{
			ans=max(ans,ve[i]+sum);
			sum=sum-(ve[i]+sum);//提供的贡献 
		}
		cout<<ans<<endl;
	}
	return 0;
}

D. Blue-Red Permutation【一般 思维 / 贪心】


https://codeforces.com/contest/1607/problem/D
将红的放一块,蓝的放一块,分类排序讨论即可。

#include<bits/stdc++.h> 
using namespace std;
const int N=1e5*2+10;
int a[N],t,n;
bool cmp(int a,int b) {return a>b;}
int main(void)
{
	cin>>t;
	while(t--)
	{
		cin>>n;
		vector<int>ve[2];
		for(int i=0;i<n;i++) cin>>a[i];
		string s; cin>>s;
		for(int i=0;i<s.size();i++) 
			if(s[i]=='B') ve[0].push_back(a[i]);
			else ve[1].push_back(a[i]);
		sort(ve[0].begin(),ve[0].end());//蓝的从小到大
		sort(ve[1].begin(),ve[1].end(),cmp);//红的从大到小
		bool flag=1;
		for(int i=0,j=1;i<ve[0].size();i++,j++)
			if(ve[0][i]<j) flag=0;//蓝只可以减,说明不具备条件
		for(int i=0,j=n;i<ve[1].size();i++,j--) 
			if(ve[1][i]>j) flag=0;//红只可以加,说明无论如何都凑不出来j
		if(flag) puts("YES");
		else puts("NO");
	}
	return 0;
}

E. Robot on the Board 1【中 / 模拟 放缩】


https://codeforces.com/contest/1607/problem/E
不是太会,网上看了看别人的代码

#include<bits/stdc++.h>
using namespace std;
int t,n,m;
int L,R,U,D,x,y,a,b; 
string s;
int main(void)
{
	cin>>t;
	while(t--)
	{
		cin>>n>>m>>s;
		a=b=1;
		L=1,R=m;
		D=1,U=n;
		x=y=1;
		for(int i=0;i<s.size();i++)
		{
			if(s[i]=='L') y++;
			if(s[i]=='R') y--;
			if(s[i]=='D') --x;
			if(s[i]=='U') ++x;
			L=max(L,y);
			D=max(D,x);
			R=min(R,y+m-1);
			U=min(U,x+n-1);
			if(L<=R&&D<=U) a=D,b=L; 
		}
		cout<<a<<" "<<b<<endl;
	}
	return 0;
}

以上是关于Codeforces Round #753 (Div. 3) A-E的主要内容,如果未能解决你的问题,请参考以下文章

Codeforces Round #753 (Div. 3) ABCD

Codeforces Round #753 (Div. 3) ABCD

Codeforces Round #753 (Div. 3) ABCD

Codeforces Round #753 (Div. 3) A-E

Codeforces Round #753 (Div. 3)(ABCDE)

Codeforces Round #436 E. Fire(背包dp+输出路径)