标签:end 条件 algo 情况 return 开始 思路 typedef 线段
B.这次比赛的时候我晚去了一会,等到我做这题的时候已经没有时间了,这道题是找到两个线段其中一个能包容另一个,我先用sort函数先对输入的数进行了排序,然后从头向后查找,后面符合条件的线段会替换前面的,能找的包含情况话就输出YES,否则就是NO。
代码如下:
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long ll;
const int MAXN = 3e5 + 10;
struct node{
ll start, end, ll;
}a[MAXN];
bool cmp(struct node a, struct node b){
if (a.end != b.end){
return a.end < b.end;
}
else{
return a.start > b.start;
}
}
int main(){
ll n;
cin >> n;
for (ll i = 0; i < n; i++){
cin >> a[i].start >> a[i].end;
a[i].ll = i + 1;
}
sort(a, a + n, cmp);
ll max = 0, mian;
for (ll i = 0; i < n; i++){
if (a[i].start > max){
max = a[i].start;
mian = a[i].ll;
}
else{
cout << mian << " " << a[i].ll << endl;
return 0;
}
}
cout << "-1" << " " << "-1" << endl;
return 0;
}
C.地下城还有劳拉
我刚开始写这个的时候想的是一步一步来,先走到最下面再往一边走蛇形,一次一步,写完之后我真的是天真了,题目的数还是挺大的,我毫不意外的超了时间,然后我就升级了一下我的思路,我觉得一步一步不行的话,我就让他一次走一排,让他提提速,我改了改程序提交上以后,我又毫不意外的超时了,这时候我想到了我的终极思路,我先让他走到最下面,然后让你一下走完,对剩余的步数取除数和余数,然后判断除数的奇偶性,决定他向上走了多少步,也决定了他向那边走,在加上余数,就能的到想要的答案,如果步数低于(1,2)就说明他已经到了这里,所以直接输出(1,2)。
代码如下:
#include<iostream>
using namespace std;
int main()
{
long long n,m,k;
cin>>n>>m>>k;
long long a=1,b=1;
if(k+1<=n){
cout<<a+k<<" "<<b;
}
else{
k=k+a-n;
a=n;
k--;
b++;
long long x=k/(m-1);
long long y=k%(m-1);
a-=x;
if(x%2==0){
b+=y;
}else{
b=m-y;
}
if(a<1||b<2){
a=1;b=2;
cout<<a<<" "<<b;
}else{
cout<<a<<" "<<b;
}
}
}
标签:end 条件 algo 情况 return 开始 思路 typedef 线段
原文地址:https://www.cnblogs.com/yclW/p/12207659.html