Codeforces Beta Round #6 (Div. 2)未完结

Posted 辉小歌

tags:

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

2022.3.4
题单地址:https://codeforces.com/contest/6

目录

A. Triangle【枚举】

#include<bits/stdc++.h>
using namespace std;
int a[10];
int main(void)

	for(int i=0;i<4;i++)  cin>>a[i];
	sort(a,a+4);
	int flag=0;
	for(int i=0;i<4;i++)
	
		for(int j=i+1;j<4;j++)
		
			for(int k=j+1;k<4;k++)
			
				if(a[i]+a[j]>a[k]) flag=max(flag,2);
				if(a[i]+a[j]==a[k]) flag=max(flag,1);
			
		
	
	if(flag==2) puts("TRIANGLE");
	else if(flag==1) puts("SEGMENT");
	else puts("IMPOSSIBLE");
	return 0;

B. President’s Office【枚举】



这种同一个字符的是一个桌子。故用map来去重,求挨着的不同字符的种类即可

#include<bits/stdc++.h>
using namespace std;
int n,m;
string s[205]; 
char c;
map<char,int>mp;
void solve(int x,int y)

	int dx[4]=-1,0,0,1,dy[4]=0,-1,1,0;
	for(int i=0;i<4;i++)
	
		int tempx=x+dx[i],tempy=y+dy[i];
		if(tempx<0||tempx>=n||tempy<0||tempy>=m) continue;
		if(s[tempx][tempy]=='.') continue;
		if(s[tempx][tempy]==c) continue;
		mp[s[tempx][tempy]]++;
	

int main(void)

	cin>>n>>m>>c;
	for(int i=0;i<n;i++) cin>>s[i];
	for(int i=0;i<n;i++)
	
		for(int j=0;j<m;j++) if(s[i][j]==c) solve(i,j);
	
	cout<<mp.size();
	return 0;

C. Alice, Bob and Chocolate【前缀和】


用前缀和,再枚举一个将其分割成两份。看剩余的相等不相等。
如果相等说明最后一次,他们吃的是同一块,按照题目给第一个加1即可。
否则的话,我们就输出分成两份差最小的位置。

#include<bits/stdc++.h> 
using namespace std;
const int N=1e5+10;
int a[N],s[N],n;
int main(void)

	cin>>n;
	for(int i=1;i<=n;i++) cin>>a[i],s[i]=s[i-1]+a[i];
	int temp=1e9;
	for(int i=1;i<=n;i++)
	
		if(s[i-1]==s[n]-s[i])//可以吃同一块
		
			cout<<i<<" "<<n-i;
			return 0;
		
		temp=min(temp,abs(s[n]-2*s[i]));
	
	for(int i=1;i<=n;i++)
	
		if(temp==abs(s[n]-2*s[i]))
		
			cout<<i<<" "<<n-i;
			return 0;
		
	
	return 0;

D. Lizards and Basements 2【未完成 DP】

E. Exposition【st表 / 单调队列】


就是求最长的区间,区间内的最大值减去最小值的差小于等于k,且输出所有满足最长区间的左右端点。
单调队列可做,st表也可做。
这里是用二分+st表做的,二分一下区间。

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+1;
int n,k,mx[N][20],mn[N][20],a[N];
int getmx(int l,int r)
  int tmp=log2(r-l+1);
  return max(mx[l][tmp],mx[r-(1<<tmp)+1][tmp]);

int getmn(int l,int r)
  int tmp=log2(r-l+1);
  return min(mn[l][tmp],mn[r-(1<<tmp)+1][tmp]);

void init()

    for(int i=1;i<=n;i++) mx[i][0]=mn[i][0]=a[i];
    for(int j=1;j<20;j++)
    
        for(int i=1;i+(1<<j)-1<=n;i++)
        
            mx[i][j]=max(mx[i][j-1],mx[i+(1<<j-1)][j-1]);
            mn[i][j]=min(mn[i][j-1],mn[i+(1<<j-1)][j-1]);
        
    

vector<pair<int,int>>ve;
bool check(int mid)

    ve.clear();
    for(int i=1;i+mid-1<=n;i++)
    
        int l=i,r=i+mid-1;
        if( (getmx(l,r)-getmn(l,r)) <=k) ve.push_back(l,r);
    
    if(ve.size()) return true;
    return false;

int main()
  cin>>n>>k;
  for(int i=1;i<=n;i++) cin>>a[i];
  init();
  int l=1,r=n;
  while(l<r)
  
      int mid=l+r+1>>1;
      if(check(mid)) l=mid;
      else r=mid-1;
  
  if(check(l)) cout<<l<<" "<<ve.size()<<endl;
  for(int i=0;i<ve.size();i++) cout<<ve[i].first<<" "<<ve[i].second<<endl;

以上是关于Codeforces Beta Round #6 (Div. 2)未完结的主要内容,如果未能解决你的问题,请参考以下文章

2017-4-17-Train:Codeforces Beta Round #6 (Div. 2 Only)

Codeforces Beta Round #7

Codeforces Beta Round #34 (Div. 2)

Codeforces Beta Round #49 (Div. 2)

Codeforces Beta Round #59 (Div. 2)

Codeforces Beta Round #75 (Div. 2 Only)