群赛地址:
https://vjudge.net/contest/185399#problem
(缺后三题)
A - 初出茅庐
CodeForces - 845A题意:给出2*n个数,要把他们分成长度为n的两队,使一队的数比另一队都小.
题解:
#include<bits/stdc++.h>
using namespace std;
int n,a[1100];
int main(){
cin>>n;
n*=2;
for(int i=1;i<=n;i++)cin>>a[i];
sort(a+1,a+1+n);
if(a[n/2]==a[n/2+1])cout<<"NO";
else cout<<"YES";
}
B - 崭露头角
CodeForces - 845B题意:给出一个六个数字的字符串,每次修改可以把一个字符改成任意一个数字,求使左边三个字符和右边三个字符和相等的最小操作次数.
题解:
#include<bits/stdc++.h>
using namespace std;
int main(){
char a[6];
int sum1=0,sum2=0,lb,ls,rb,rs,k;
scanf("%s",a);
for(int i=0;i<6;i++)a[i]-=48;
sum1=a[0]+a[1]+a[2];
sum2=a[3]+a[4]+a[5];
for(k=0;sum1!=sum2;k++){
lb=ls=0;rb=rs=3;
for(int j=0;j<3;j++){
if(a[j]>a[lb])lb=j;
if(a[j]<a[ls])ls=j;
}
for(int j=3;j<6;j++){
if(a[j]>a[rb])rb=j;
if(a[j]<a[rs])rs=j;
}
if(sum1<sum2){
if(9-a[ls]>a[rb]){
int t=min(sum2-sum1,9-a[ls]);
sum1+=t;
a[ls]+=t;
}
else{
int t=min(sum2-sum1,(int)a[rb]);
sum2-=t;
a[rb]-=t;
}
}
else{
if(a[lb]>9-a[rs]){
int t=min(sum1-sum2,(int)a[lb]);
sum1-=t;
a[lb]-=t;
}
else{
int t=min(sum1-sum2,9-a[rs]);
sum2+=t;
a[rs]+=t;
}
}
}
cout<<k;
}
C - 渐入佳境
CodeForces - 845C题意:某人有两台电视,他有一些节目要看,一台电视在一个时间只能播放一个节目.给出节目的开始与结束时间,问他能否看所有节目.
题解:
#include<bits/stdc++.h>
using namespace std;
int p1=-1,p2=-1,n;
struct point{
int l,r;
}a[200010];
bool cmp(const point &a,const point &b){
return a.r<b.r;
}
int main(){
cin>>n;
for(int i=1;i<=n;i++)scanf("%d%d",&a[i].l,&a[i].r);
sort(a+1,a+1+n,cmp);
int i;
for(i=1;i<=n;i++){
if(p1>p2){
if(p1<a[i].l)p1=a[i].r;
else{
if(p2<a[i].l)p2=a[i].r;
else break;
}
}
else{
if(p2<a[i].l)p2=a[i].r;
else{
if(p1<a[i].l)p1=a[i].r;
else break;
}
}
}
if(i==n+1)printf("YES");
else puts("NO");
}
D - 炉火纯青
CodeForces - 845D题意:某人在开车,路上会遇到各种路标:有限速,取消限速,禁止超车,允许超车.他也会改变车速和超车.求使他不违反交规的最少忽视路标次数.
题解:
#include<bits/stdc++.h>
using namespace std;
int n,type,s,sumover,speed,ans;
stack<int>sumspd;
int main(){
scanf("%d",&n);
while(n--){
scanf("%d",&type);
switch(type){
case 1:{
scanf("%d",&speed);
while(!sumspd.empty()&&sumspd.top()<speed){
sumspd.pop();ans++;
}
break;
}
case 3:{
scanf("%d",&s);
sumspd.push(s);
while(!sumspd.empty()&&sumspd.top()<speed){
sumspd.pop();ans++;
}
break;
}
case 5:while(!sumspd.empty())sumspd.pop();break;
case 2:ans+=sumover;sumover=0;break;
case 4:sumover=0;break;
case 6:sumover++;break;
}
}
printf("%d",ans);
}
E - 登峰造极
CodeForces - 845E
F - 事了拂衣去
CodeForces - 845F
G - 深藏功与名
CodeForces - 845G