前言
不知不觉到了第二天,今天没怎么下雨,对于经历了两天大雨的自己来说:心情舒畅qwq
可是尽管“心情再舒畅”,都不能挽救考撇了的事实——努力改题吧
Day2杂记
早上依旧起不来...我秉持了自己“听到铃声继续睡”的一贯作风,成功赖床直到6:50(难道是在石马河养成的良好习惯?)
今天的早餐...不得不说和第一天比起来好多了,吃了一个火腿面包,一个椰蓉面包和一碗小米粥(小米粥居然是甜的orz)
作为重庆人...我急需一些咸的食物中和一下胃口...
今天上午的考题居然比昨天多了一道??!!不要告诉我是每天多一道,难道最后一天要做十几道吗
收住紧张兮兮的心情,开始看题——
T1:哎呀什么嘛,暴搜啦,100分轻轻松松到手啦
T2:woc?!博弈?!糟了我不会,还是个环,更吓人了,跳跳跳过
T3:题意好像很简单的样子,but没思路,跳
T4:哎呀和我以前做过的一道题好像!(轮到我上场表演了~)开始一边回忆一边瞎搞
甚至打出了如下惊人的连编译都过不了的代码:
看看就好...毕竟它还是个孩子(连编译都没过),这里只是纪念一下 智障的 自己
//超级奇葩复杂的做法,而且编译还没过orz...
#include<cstdio>
#include<vector>
#include<queue>
#include<stack>
#include<cstring>
#include<cmath>
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
const int MAXN=1e5,INF=0x3f3f3f3f;
int n,Min=INF,Max=-INF,ans,cnt,id,len,ID,LEN;
struct node
{
int l,r;
}a[MAXN+5];
struct Node
{
vector<int> num;
}f[10*MAXN+5];
Node t,que;
bool cmp(node a,node b)
{
if(a.l==b.l)
return a.r>b.r;
return a.l<b.l;
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d%d",&a[i].l,&a[i].r);
Min=min(Min,a[i].l);
Max=max(Max,a[i].r);
}
sort(a+1,a+n+1,cmp);
for(int i=1;i<=n;i++)
{
//端点有可能重合怎么办? 赋值i不可行
cnt++;
f[a[i].l].num.push_back(-cnt);//区间左端点为负
f[a[i].r].num.push_back(cnt);//区间右端点为正
}
cnt=0;
for(int i=Min;i<=Max;i++)
{
if(!f[i].num.size())
continue;
for(int k=0;k<f[i].num.size();k++)//处理左端点
{
int tmp=f[i].num[k];
vector<int> Tmp;
if(tmp<0)
{
//printf("%d\n",tmp);
Tmp.push_back(tmp);
//t.push(tmp);
}
}
t[++len].num=Tmp;
for(int k=0;k<f[i].num.size();k++)//处理右端点
{
int tmp=f[i].num[k];
if(tmp>0)
{
vector<int> x;
int flag=0;
x=t[id].num;
ID=LEN=1;
for(int j=0;j<x.size();j++)
{
if(x[j]+tmp!=0)
{
que[LEN++]=x[j];
}
else
{
flag=1;
cnt++;
ans=max(ans,cnt);
}
}
id++;
//t.pop();
vector<int> Tmp;
while(LEN)
{
Tmp.push_back(que[ID]);
ID++;
}
t[++len]=Tmp;
//t.push(Tmp);
if(!flag)
cnt=0;
}
}
}
printf("%d\n",ans);
return 0;
}
编译结果(考试仅剩3分钟,不想改了,懒,颓废):红得真吉利~
之前有个版本更厉害,可惜惨遭刷机,找不到了,写了一些神仙代码例如:
stack<vector> t;
queue<vector> que;
后来才改成了现在的结构体版本orz...然后懒得挣扎了...
考试最后的结果惊了:
(最后一名:总人数不详,因为有很多人名次一样)反正就是很伤心... -嘤嘤嘤
后来发现是自己T1的暴搜写丑了...其他题...思路不灵活,练题不够,不能很好地转化问题...
下午改题+开心地吃饭+逛小卖部+回寝室洗头+看书(公用电吹风很赞,功率超大,自己的长发一会就吹干了qwq)
晚上继续改题——发现了lower_bound和upper_bound的玄学区别(我把代码的lower改成upper居然就直接AC了,笑哭)
今天时间还可以,能在博客bb的时间变宽裕了2333
随便说说
1.寝室楼的墙上爬了好好好多拳头大的蜗牛
2.发现自己吃零食的次数越来越多....! 可能是因为食堂满足不了我的胃/笑哭
3.手机统一上交,不开心
4.想念王者农药一起开黑的伙伴/暴风哭泣
题解永不言败
一、佳肴
https://blog.csdn.net/qq_36294918/article/details/98374936
因为数据范围:1<=N<=10,最多才2^n=1024种情况——>直接暴搜
(这次过后发现...连暴搜写丑了都是过不了的呜呜呜呜...)
二、取数游戏
https://blog.csdn.net/qq_36294918/article/details/98375877
1)处理“环”:复制一遍数组接在原数组后面
2)n^3的区间DP
(特别鸣谢)参考博客:https://blog.csdn.net/kerGH/article/details/51901125
3)一些自己总结的要点:(大多都标在代码注释里了)
最开始自己不理解,后来LYT小朋友解释:这一次是先手,那么上一次是就是后手,所以:总奇数个数 - 后手奇数个数 = 先手奇数个数
三、删除
https://blog.csdn.net/qq_36294918/article/details/98377483
万万没想到这是个【贪心】...
因为第一行保证是1~n,二三行数字范围1~n但是个数不定,所以第一行有的数,二三行不一定有,就要去掉
一直删除,直到合法即可
(依然不还是很清楚为什么只和第一行比较就可以得到正解orz...有待深入思考)
四、区间
https://blog.csdn.net/qq_36294918/article/details/98378098
考试时自己一直在联系以前做过的题:线段叠加和括号匹配,感觉这道题很像(后来发现...不好实现...还不如不联系...)
正解:先排序——第一关键字:L 从小到大;第二关键字:R 从大到小
答案就是R的最长不上升子序列
要点:
1)我把R倒过来存的(好机智哈哈哈),所以就是求【不严格的最长上升子序列】
2)lower_bound和upper_bound一定要分清楚再用(感谢LYT小朋友的博客,这里推荐一下:https://blog.csdn.net/CQBZLYTina/article/details/81122583)
总结
比较充实的一天(不过依然没练多少字、没看多少书、没做多少题OTZ)
老师说明天就要开始讲课了(看了课表,有点难度 /瑟瑟发抖)
加油