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【枚举】
- B. President's Office【枚举】
- C. Alice, Bob and Chocolate【前缀和】
- D. Lizards and Basements 2【未完成 DP】
- E. Exposition【st表 / 单调队列】
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 #34 (Div. 2)
Codeforces Beta Round #49 (Div. 2)