题目J:
Description
ACM-ICPC以团队的形式代表各学校参赛,每队由至多3名队员组成。每位队员必须是在校学生,有一定的年龄限制,并且每年最多可以参加2站区域选拔赛。比赛期间,每队使用1台电脑利用C/C++、Java和Python中的一种编写程序解决7到13个问题。程序完成之后提交裁判运行,运行的结果会判定为正确或错误两种并及时通知参赛队。而且有趣的是每队在正确完成一题后,组织者将在其位置上升起一只代表该题颜色的气球,每道题目第一支解决掉它的队还会额外获得一个“FIRST PROBLEM SOLVED”的气球。
12月19-20日是第45届ICPC亚洲区域赛南京站,玄玄,小植和凡凡组了一个名叫多人运动(Time Management)的队伍,准备冲刺南京站 打铁[划掉] 。已知主办方一共出了NN道题,多人运动队计划每道题在 S_iS
i
时刻开始做,在E_iE
i
时刻做完,然鹅只有一台电脑,所以一次只能同时做一道题。作为“时间管理大师”(雾),多人运动队当然会选择在有限的时间里做最多的题啦!那么比赛结束后,他们能过多少题呢?
Input
第一行是一个整数N
后面的N+1行是两个整数Si,Ei
Output
输出一个整数表示多人运动队能过题数
思路:
由题意可知我们要求出同样的时间之内可以做出最多几道题目,因此使用贪心算法,先设置一个包含一个题目开始时间与结束时间的结构体,然后把结构体以结束时间升序排序
struct time{
int begin;
int end;
}b[100000]={0,0};
bool cmp(time x,time y){
return x.end<y.end;
}
sort(b,b+n,cmp);
排好后比较每一个结构体结束时间与下一个结构体开始时间,如果结束时间小于等于下一个的开始时间,使做出的题目数量q++,并且让下一个结构体与后面进行比较;
反之让此结构体继续与再下一个结构体比较
完整代码
#include<stdio.h>
#include<algorithm>
using namespace std;
struct time{
int begin;
int end;
}b[100000]={0,0};
bool cmp(time x,time y){
return x.end<y.end;
}
int main()
{
int i,n,q=1;
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%d %d",&b[i].begin,&b[i].end);
}
sort(b,b+n,cmp);
struct time num=b[0];
for(i=1;i<n;i++){
if(num.end>b[i].begin)
continue;
else{
q++;
num=b[i];
}
}
printf("%d",q);
return 0;
}
题目L:
菜学长的糖糖
Description
菜学长有一堆糖糖,菜学长的糖糖都有自己的标号并且同一个标号的糖糖总是有偶数个,但是有一天被贪吃的学姐偷吃掉了一个,菜学长很生气,你能帮菜学长找出这个糖糖的标号吗?
第一行一个数n(3<=n<=1000),接下来n个数代表菜学长有n个糖糖
(可以知道输入的n总是奇数),后面n个数代表每个糖糖的标号。
输出被偷吃掉的糖糖的标号。
思路:
可知只有被吃掉的糖标号的数量是单数因此只需要将所有的数异或所得的结果就是被吃掉的糖的标号
完整代码:
#include<stdio.h>
int main()
{
long long i,n,t[1010]={0},q;
scanf("%lld",&n);
for(i=0;i<n;i++){
scanf("%lld",&t[i]);
}
q=t[0];
for(i=0;i<n-1;i++){
q=q^t[i+1];
}
printf("%lld",q);
return 0;
}