奋斗群群赛10—次次诡异
T1:Chess Tourney
题目位置:
题意:
就是有n个数,你能否保证对半分之后,子集A的任意元素都能够比子集B的元素大,输出YES,不然输出NO!
AC代码
#include <bits/stdc++.h>
using namespace std;
const int N= 105;
int a[N],b[N];
int main()
{
int n;
scanf("%d",&n);
for(int i=1; i<=n*2; i++)
{
scanf("%d",&a[i]);
}
sort(a+1,a+1+2*n);
if(a[n+1]>a[n])
cout<<"YES";
else
cout<<"NO";
return 0;
}
小反思:无
T2:Luba And The Ticket
题目位置:
题意:
问你将一个数经过多少次改变才能使得s1+s2+s3=s4+s5+s6;
输出最少操作次数,可以六重暴力枚举!
#include <bits/stdc++.h>
using namespace std;
int main()
{
string s;
cin>>s;
int tot=4;
for(int a=0; a<=9; a++)
for(int b=0; b<=9; b++)
for(int c=0; c<=9; c++)
for(int d=0; d<=9; d++)
for(int e=0; e<=9; e++)
for(int f=0; f<=9; f++)
{
if(a+b+c==e+f+d)
{
int ans=0;
if(a+48!=s[0])
ans++;
if(b+48!=s[1])
ans++;
if(c+48!=s[2])
ans++;
if(d+48!=s[3])
ans++;
if(e+48!=s[4])
ans++;
if(f+48!=s[5])
ans++;
if(ans<tot)
tot=ans;
}
}
cout<<tot<<endl;
}
小反思:
就是十分美丽的”暴力”!
T3:Two TVs
题目位置
题意:
就是主要问你给你n组数据,每个节目表示了开始时间和结束时间,就是问你有2台电视,问你能不能够将所有的电视节目分别在2个电脑上出现就好了!但是直达注意到的一点就是如果一个电视节目在时间 5 的位置结束,那么5的时间将不能将别的电视节目装进来,问你能不能够办到?输出YES or NO!
AC代码
#include <bits/stdc++.h>
using namespace std;
const int N=2000005;
struct tv
{
int start,end;
} t[N];
int book[N],a[N],b[N],line[N*10];
bool com(tv x,tv y)
{
return x.start<y.start;
return x.end<y.end;
}
int main()
{
int n,end=-1,tot;
scanf("%d",&n);
tot=n;
for(int i=1; i<=n; i++)
{
scanf("%d%d",&t[i].start,&t[i].end);
if(t[i].end>end)
end=t[i].end;
}
sort(t+1,t+1+n,com);
int head1=1,head2=1;
a[head1]=b[head2]=-1;
for(int i=1; i<=n; i++)
{
if(t[i].start>a[head1])
{
head1++;
a[head1]=t[i].end;
book[i]=1;
continue;
}
if(t[i].start>b[head2])
{
head2++;
b[head2]=t[i].end;
book[i]=1;
}
}
int flag=0;
for(int i=1; i<=n; i++)
{
if(book[i]==0)
{
flag=1;
break;
}
}
if(flag==0)
{
printf("YES");
}
else
printf("NO");
return 0;
}
小反思:
这题深刻的让我知道了不初始化的严重性 , 因为如果没有这个
a[head1]=b[head2]=-1;
那么就是会有一个数据点电视是 0 点开始的,那么就不会收纳进去!所以一直在WA第5个点,十分的伤心!
T4:Driving Test
题目位置:
题意:
就是开车时会有n个数据显示汽车的状态,问你有多少次的可能使得这个车能够顺利的不违章的过去!
1.Polycarp changes the speed of his car to specified (this event comes with a positive integer number);
2.Polycarp’s car overtakes the other car;
3.Polycarp’s car goes past the “speed limit” sign (this sign comes with a positive integer);
4.Polycarp’s car goes past the “overtake is allowed” sign;
5.Polycarp’s car goes past the “no speed limit”;
6.Polycarp’s car goes past the “no overtake allowed”;
AC代码(系统自带栈):
#include <bits/stdc++.h>
using namespace std;
stack <int> my_stack;
const int N=1000005;
//int tp[N],top;
int main()
{
int n,x,time,speed,rule=0;
scanf("%d",&n);
my_stack.push(9999999);
int tot=0;
for(int i=1; i<=n; i++)
{
cin>>time;
//输入速度
if(time==1) cin>>speed;
//超车的时候
if(time==2)
{
//拆除表示叫你不要超车的标识
tot+=rule;
rule=0;
}
if(time==3)
{
//路过限速
cin>>x;
my_stack.push(x);
}
//可以飙车!
if(time==4)
{
rule=0;
}
if(time==5)
{
my_stack.push(9999999);
}
if(time==6)
{
//经过超车的时候将其++
//但是不好说明 2个 6的时候的情况
rule++;
}
//相当于是在建一个栈的操作!
while(speed>my_stack.top())
{
my_stack.pop();
tot++;
}
}
cout<<tot<<endl;
return 0;
}
AC代码(手写栈):
#include <bits/stdc++.h>
using namespace std;
const int N=1000005;
int tp[N],top;
int main()
{
int n,x,time,speed,rule=0;
scanf("%d",&n);
tp[0]=99999999;
int tot=0;
for(int i=1; i<=n; i++)
{
cin>>time;
//输入速度
if(time==1) cin>>speed;
//超车的时候
if(time==2)
{
//拆除表示叫你不要超车的标识
tot+=rule;
rule=0;
}
if(time==3)
{
//路过限速
cin>>x;
top++;
tp[top]=x;
}
//可以飙车!
if(time==4)
{
rule=0;
}
if(time==5)
{
top++;
tp[top]=9999999;
}
if(time==6)
{
//经过超车的时候将其++
//但是不好说明 2个 6的时候的情况
rule++;
}
//相当于是在建一个栈的操作!
while(speed>tp[top])
{
top--;
tot++;
}
}
cout<<tot<<endl;
return 0;
}
总结:
1.就是数据初始化的问题导致
2.学会简化问题
3.不去紧张和看重Rank比分!