比赛总结
打得有点怂,这次div1题目比较水,我做了三题,不过比较坑的是,我第二题因为少了几个特判,wa了8次才ac,第三题因为看错题,wa了两次才ac
在正式和非正式选手里排名438名
在正式选手里排名306名
(做了三题,罚时太惨被一堆做2题的艹了。。。)
A. Exams
题目链接
http://codeforces.com/contest/480/problem/A
题目大意
某人要参加
思路
考试进行的顺序,一定是按照
但是每场考试是选
代码
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <algorithm>
#define MAXN 6000
using namespace std;
pair<int,int>pr[MAXN];
int n;
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d%d",&pr[i].first,&pr[i].second);
sort(pr+1,pr+n+1);
int last=pr[1].second;
for(int i=2;i<=n;i++)
{
if(pr[i].second>=last) last=pr[i].second;
else last=pr[i].first;
}
printf("%d\n",last);
return 0;
}
B. Long Jumps
题目链接
http://codeforces.com/contest/480/problem/B
题目大意
给你一个长度为
思路
显然,答案最多为2,如果已经存在了某两个刻度之间距离为
这个可以通过枚举刻度
但是重点不在于此,而是一个特殊情况:有可能存在某两个已经存在的刻度,插入一个新的刻度后,就可以满足题目要求了。这个就需要特判了,具体看代码比较清楚吧
代码
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <algorithm>
#define MAXN 6000
using namespace std;
pair<int,int>pr[MAXN];
int n;
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d%d",&pr[i].first,&pr[i].second);
sort(pr+1,pr+n+1);
int last=pr[1].second;
for(int i=2;i<=n;i++)
{
if(pr[i].second>=last) last=pr[i].second;
else last=pr[i].first;
}
printf("%d\n",last);
return 0;
}
C. Riding in a Lift
题目链接
http://codeforces.com/contest/480/problem/C
题目大意
一个
思路
一个非常显然的DP思路:
设
这样DP的复杂度为
我们知道,给一个序列不断进行区间加的操作,可以维护一个数组a[]
代码
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <algorithm>
#define MAXN 6000
using namespace std;
pair<int,int>pr[MAXN];
int n;
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d%d",&pr[i].first,&pr[i].second);
sort(pr+1,pr+n+1);
int last=pr[1].second;
for(int i=2;i<=n;i++)
{
if(pr[i].second>=last) last=pr[i].second;
else last=pr[i].first;
}
printf("%d\n",last);
return 0;
}