[成长] 退役?再见~OI

来源:互联网 发布:电子数据交换名词解释 编辑:程序博客网 时间:2024/05/16 19:09

2017年11月12日
这是一个特殊的日子
不仅仅是双十一刚刚结束,也是NOIP正式结束的日子
阴天,打完代码出来的我仍然还在回望考场上的题目
“DAY2考的舒服多了” 我这么想
希望大家也是这样吧

DAY1的题目基本爆炸
唯一会一点点的只有T1,只不过最后也只能无奈的交上去一个暴力
考试策略问题,T2浪费了我2h的时间,最后还是因为恶心的字符串处理没有调出来
T3明明很可做,却因为看着只剩下30分钟的时间而放弃

坐上回家的车,我妈问我去哪吃饭
“去吃烤肉吧” 我说
然后辗转在长沙市各个角落寻找烤肉店
未果,只得随便吃了些东西填了下肚子

回到家中,看着自己的笔记本,不知道该说些什么
打开QQ,得知HN的代码已经发了下来
“记得好像LG上有在线测评” 我想
测哪些呢?

先测DAY1吧
T1神奇的跑过了5个点
但是看到题解让我心凉了半截
为什么自己就不能花那么一丁点时间去看看样例找下规律?
明明对于自己不擅长的字符串处理还用那么多时间?

T2不用说,我也没敢测,肯定是报零
“送分给你你都拿不到” 我对自己说

T3 30分钟打出来的东西本来就没有报什么希望
但是看到Compile Error我的心还是一紧
打开程序一看
里面莫名的多出了一个’a’
欸,删掉重新测
10分 聊胜于无吧
反正联赛是0了

忍着心中的悲哀
开始测自己认为比较有把握的DAY2
不错,自己想拿的分都拿到了
毕竟心态决定一切

自己DAY2T2枚举骗分和T3O(q2)算法都觉得比较优秀了

Code:

T2#include <bits/stdc++.h>using namespace std;#define INF 707406378struct Edge {    int to;    int next;    int c;}edge[500];int head[20];struct E {    int u;    int v;    int w;}e[500];long long c[20];long long dist[20];long long ANS=99999999999;int MAP[20][20];int way[20];int fa[20];bool vis[500];int n,m,tot=0,total=0;int read() {    int ans=0,flag=1;    char ch=getchar();    while( (ch>'9' || ch<'0') && ch!='-' ) ch=getchar();    if(ch=='-') flag=-1,ch=getchar();    while(ch<='9' && ch>='0') ans=ans*10+ch-'0',ch=getchar();    return ans*flag;}void addedge(int u,int v,int w) {    edge[++tot].to=v;    edge[tot].c=w;    edge[tot].next=head[u];    head[u]=tot;    return ;}void build(int son,int fa) {    for(int i=head[son];i;i=edge[i].next) {        int to=edge[i].to;        if(to!=fa)            build(to,son);    }    for(int i=head[son];i;i=edge[i].next) {        int to=edge[i].to;        if(to!=fa)            dist[son]+=dist[to]+edge[i].c,c[son]+=c[to]+dist[to]+edge[i].c;    }    return ;}void bfs(int son,int fa) {    for(int i=head[son];i;i=edge[i].next) {        int to=edge[i].to;        if(to!=fa) {            c[to]=c[son]+dist[1]-dist[to]-dist[to]-edge[i].c;            ANS=min(ANS,c[to]);            bfs(to,son);        }    }}void getans() {    memset(c,0,sizeof(c));    memset(dist,0,sizeof(dist));    build(1,0);    ANS=min(ANS,c[1]);    bfs(1,0);}int find(int x) {return x==fa[x] ? fa[x] : fa[x]=find(fa[x]);}void getedge(int x,int before) {    if(x==0) {        for(int i=1;i<=n;i++) fa[i]=i;        memset(edge,0,sizeof(edge));        memset(head,0,sizeof(head));        tot=0;        for(int i=1;i<n;i++) {            int fx=find(e[way[i]].u),fy=find(e[way[i]].v);            if(fx!=fy) {                fa[fx]=fy;                addedge(e[way[i]].u,e[way[i]].v,e[way[i]].w);                addedge(e[way[i]].v,e[way[i]].u,e[way[i]].w);            }            else                return;        }        getans();    }else {        for(int i=before+1;i<=total;i++) {            if(!vis[i]) {                vis[i]=1;                way[x]=i;                getedge(x-1,i);                way[x]=0;                vis[i]=0;            }        }    }    return ;}int main() {    freopen("treasure.in","r",stdin);    freopen("treasure.out","w",stdout);    memset(MAP,127/3,sizeof(MAP));    n=read(),m=read();    for(int i=1;i<=m;i++) {        int x=read(),y=read(),z=read();        if(MAP[x][y]>z)            MAP[x][y]=MAP[y][x]=z;    }    for(int i=1;i<=n;i++) {        for(int j=i+1;j<=n;j++) {            if(i==j || MAP[i][j]==INF) continue;            e[++total].u=i;            e[total].v=j;            e[total].w=MAP[i][j];        }    }    getedge(n-1,0);    printf("%lld",ANS);    return 0;}
//T3#include <bits/stdc++.h>using namespace std;long long sum[300010];int x[300010];int y[300010];int n,m,q;int read() {    int ans=0,flag=1;    char ch=getchar();    while( (ch>'9' || ch<'0') && ch!='-' ) ch=getchar();    if(ch=='-') flag=-1,ch=getchar();    while(ch<='9' && ch>='0') ans=ans*10+ch-'0',ch=getchar();    return ans*flag;}long long work(int x1,int y1,int i) {    if(i==1)        return (x1-1)*m+y1;    int x2=x1,y2=y1;    if(y1==m && x1==n)        return work(x[i-1],y[i-1],i-1);    if(y1==m && x1>=x[i-1])        x2=x1+1;    else if(y1>=y[i-1] && x1==x[i-1])        y2=y1+1;    return work(x2,y2,i-1);}int main() {    freopen("phalanx.in","r",stdin);    freopen("phalanx.out","w",stdout);    n=read(),m=read(),q=read();    for(int i=1;i<=q;i++)        x[i]=read(),y[i]=read();    for(int i=q;i>=1;i--)        sum[i]=work(x[i],y[i],i);    for(int i=1;i<=q;i++) {        printf("%lld\n",sum[i]);    }    return 0;}

DAY1T1的50加上DAY1的200
应该勉强是能够拿到省一的
但是,令人崩溃的在后面

又测了 清北学堂 的数据忽然发现第一题报零!一看,MLE

至此,我已完全心灰意冷
一个多月的停课
老师的支持
家长的鼓励
以及这30多天来辛辛苦苦的付出
在这一刻好像都灰飞烟灭

也许,这就是我的思想必然的后果吧
总想着省一省一应该很容易吧!暴力暴力不就过了么?

事实证明我错了

欸,想想学校那么认识我的人们,他们知道我这次考砸了,我会羞愧到无地自容吧
还想着能拿多少多少分
结果被WTX等一众daloa爆踩

不知道为什么,每次遇到DAY1T2这样的题目我总是会被巨大的调试工作量吓破胆
估计 心态爆炸

我是不是过于紧张了?
模拟赛时舍我其谁的气势去哪了?
做题时沉稳认真的态度去哪了?
这都是我的问题

毕竟,这是我第一次参加提高组
总是想着省一省一
还是要将心态放平和
“能搞就搞,不能搞就休息,管他那么多”

看来以后还是不能想太多
淡定才能成就自己

想想自己其实也并不是一个很厉害怎么怎么样的人
还有很多地方需要学习
还是做题做少了啊!
看着kb随便一个专题的做题量就是我几个专题的总和就让我无地自容

以后还是少搞些七里八里的东西

欸,这次的事就当作是我OI史上的一个挫折吧,毕竟也只有这样我才能走得更远
希望有机会走得更远

估计接下来的几个月我是要滚回常规啦
博客估计也要暂时停更啦

我知道,是时候展现真正的技术了
待我杀回竞赛,与各位重论江山!

再见,OI;
你好,?

原创粉丝点击