NOIP2017劝退记

D0

下午1点出发,在地铁上站了一个多小时来到万达,然后在万达门前站了近1h等房卡。
接着和小伙伴们走路去看考场,我边走边肝炉石,jjc打了7胜。
回来后草草地在金拱门吃,晚上向hzh低头,玩了两把狮子狗。
回去洗完澡后躺在床上把Angel beats看完了,
突然想起千珏的一句台词,真正的死亡,是从未活过…。
感觉有点虐,不敢看另一个结局,再看了集四月就睡了。

D1

吃完早餐后企图骑共享单车去考场,骑到一半发现全是上坡,果断扔掉单车走路了。

T1根据“数学上来先打表”并没有看出什么,用exgcd推了半个小时也没有结果。
T2是个模拟,结合两个样例用1个小时打出了一个精巧的程序。
看T3,刚开始沉迷进一个奇怪的地方,后来发现这不是个很套路的最短路计数吗。
于是根据“图论就是套模板”,飞快地打完了建图,spfa,dfs找环与拓扑。
发现大数据错了,一直怀疑是上面某个算法打错了。
而dp的计数方法是这题的核心,是我某瞬间的灵感产生的,再由此推出整道题。
我丝毫没有怀疑,一直检查程序,一直很紧张很慌。
还剩半个小时,T3暴力也想不出来,就放弃T3了。
T1发现好像是b*(a-1)-a,跟暴力对拍错了很多。
于是保留了暴力,再打了个优化的暴力(二分+exgcd检查100000个),对拍又错了…
然后交了暴力和b*(a-1)-a。(我们仍未知道那天我打的暴力为何这么牛B)。

考完之后深知考炸了,一直很慌,下午去玩了场密室逃脱,晚上玩了2把lol就洗洗睡了。

D2

T1打n^2搜索应该没问题吧,15分钟打完了。
不知为什么就没考虑到爆longlong和纵坐标<0的情况。
T2大概想了一下,并没有任何头绪,但有一个奇怪的念头觉得这题肯定能想出来。
T3画了下图,10分钟左右,觉得离散化后300001棵Splay可以做。
想到标程没有数据结构,推出了一个二分+BIT的方法,深信这就是正解。
然后再想暴力,打了个50分的。
看到有20分我只会用splay实现,不如打正解。
但那个念头驱使我去想T2,想了半个小时才发现看错题了,原来代价是点的数量×长度,而不是长度×长度。
但依然没想到,70分都不会,打了个n!水40。
还有1个小时多一点,开始打T3,哼,调不出来,交了50分暴力。

出来由于没饭票,自己走去万达吃饭,听CSH讲了T2,拍照也没兴趣。
吃完饭后买了罐啤酒,低着头喝了0.5h。后来看到老师也躲着,跟在队伍后面回到学校。

这次noip告诉我,我确实连L指导(shengdui)一半水平都没有。
再简单规范,也有很多我想不到的题。
暴力确实重要,暴力打满也是要实力和运气的。
更重要的心理素质和考试心态,想清楚有把握再打。
思维要保持连续,广泛地搜索可能出现的情况,不能只靠灵感和做过的套路。
只能选择相信自己的知识和写下的代码。

让我知道这些也是有代价的,也许就是退役。
两天都没有200,可能比去年还差。
幻想着ak,交的程序全都是暴力,没有用到任何高中学的知识。
noip比别人低了200分,等于省选要高85分。

暑假时听保送大佬说他们noip都没有打暴力,还真的觉得自己最多只有1题不会。
noip前几天15分钟1A天天爱跑步,就真的觉得我能ak,
甚至还担心蚯蚓这种题想不出怎么办。
我看骗分导论,作者主张扩大部分分,梯度更平缓。我还有点反感,特别是省选,觉得强省就应该有强省的样子。

但听老师号召,回归基础算法,我也搞了个计划
这里写图片描述
但唯一用到的只有最后一行“对拍”,炸了我D1T1。

我也跟着老师做了50套模拟,但大多都是套路题,改编题,老题。
要么是已经熟悉的套路,甚至是做过的题,要么和旁边讨论出套路。
或者觉得是偏题,noip出了出题人会被骂的题,就弃了。

建这个博客才3个月,如果确实退役了,也许就不再有人点开了。
可能自己也会嫌弃这三个月,有空写博客不如肝炉石。
回到班上都是陌生的同学,不敢面对的老师。
noip时他们去露营做饭了,还用班会课来分享,而我从广州二中带回去的只有一堆脏衣服。

如果我还是高一多好。记得高一期末考的作文,要写一部艺术作品。
我写了《悠久之翼》,正是我noip时看的。
结合我noip时对oi的粗鄙看法,拿了48分,是我作文拿过的最高分。想来还是很有爱的。
虽然现在鄙视无忧无虑的快乐,但依旧痛心无法回到从前了。

现在只能想到写在在1检总结结尾的那句

而后的冬天——从天而降的积雪,掩盖了所有的罪。
不久的春天——所有的惩罚,都与积雪的融化一同降临。

D1T3公园
#include <iostream>
#include <fstream>
#include <algorithm>
#include <cmath>
#include <ctime>
#include <cstdio>
#include <cstdlib>
#include <cstring>

using namespace std;
#define mmst(a, b) memset(a, b, sizeof(a))
#define mmcp(a, b) memcpy(a, b, sizeof(b))

typedef long long LL;

const int nn=300001,N=3000030,oo=1e9+7;

int T,n,m,k,P;
int x[N],y[N],len[N];
int head[N],nex[N],to[N],val[N],cnt;
int q[N],d1[N],d2[N];
int w[N],times;
int f[N][52];
bool ok,in[N],vis[N];

void add(int u,int v,int w)
{
    to[++cnt]=v;
    val[cnt]=w;
    nex[cnt]=head[u];
    head[u]=cnt;
}

void spfa(int *d,int s)
{
    for(int i=1;i<=n;i++)
    d[i]=oo;
    d[s]=0;
    q[1]=s;
    int hh=1,tt=1;
    while(hh<=tt)
    {
        int hy=q[hh%nn];
        hh++;
        in[hy]=0;
        for(int h=head[hy];h;h=nex[h])
        if(d[to[h]]>d[hy]+val[h])
        {
            d[to[h]]=d[hy]+val[h];
            if(!in[to[h]])
            {
                in[to[h]]=1;
                tt++;
                q[tt%nn]=to[h];
                if(d[q[tt%nn]]<d[q[hh%nn]])
                swap(q[tt%nn],q[hh%nn]);
            }
        }
    }
}

void dfs(int x)
{
    vis[x]=1;
    in[x]=1;
    for(int h=head[x];h;h=nex[h])
    if(d1[to[h]]==d1[x]+val[h])
    {
        if(in[to[h]])
        {
            if(d1[x]+d2[x]<=d1[n]+k)
            ok=false;
        }
        if(!vis[to[h]])
        dfs(to[h]);
    }
    in[x]=0;
    w[++times]=x;
}

int main()
{
    cin>>T;
    while(T--)
    {

    ok=1;
    times=cnt=0;
    mmst(head,0);
    mmst(vis,0);
    cin>>n>>m>>k>>P;

    for(int i=1;i<=m;i++)
    scanf("%d%d%d",&x[i],&y[i],&len[i]);

    for(int i=1;i<=m;i++)
    add(y[i],x[i],len[i]);
    spfa(d2,n);

    times=cnt=0;
    mmst(head,0);
    for(int i=1;i<=m;i++)
    add(x[i],y[i],len[i]);
    spfa(d1,1);

    dfs(1);

    if(!ok)
    {
        cout<<-1<<endl;
        continue;
    }

    for(int i=1;i<=n;i++)
    for(int j=0;j<=k;j++)
    f[i][j]=0;

    f[1][0]=1;
    for(int j=0;j<=k;j++)
    {
        for(int i=times;i>=1;i--)
        for(int h=head[w[i]];h;h=nex[h])
        if(d1[to[h]]==d1[w[i]]+val[h])
        f[to[h]][j]=(f[to[h]][j]+f[w[i]][j])%P;

        for(int i=1;i<=m;i++)
        if(d1[x[i]]+len[i]>d1[y[i]]&&d1[x[i]]+len[i]-d1[y[i]]+j<=k)
        f[y[i]][d1[x[i]]+len[i]-d1[y[i]]+j]=(f[y[i]][d1[x[i]]+len[i]-d1[y[i]]+j]+f[x[i]][j])%P;
    }

    int ans=0;
    for(int j=0;j<=k;j++)
    ans=(ans+f[n][j])%P;
    cout<<ans<<endl;

    }

    return 0;
}
D2T2宝藏
#include <iostream>
#include <fstream>
#include <algorithm>
#include <cmath>
#include <ctime>
#include <cstdio>
#include <cstdlib>
#include <cstring>

using namespace std;
#define mmst(a, b) memset(a, b, sizeof(a))
#define mmcp(a, b) memcpy(a, b, sizeof(b))

typedef long long LL;

const int N=15,M=5050,mm=10000100,oo=1e9+7;

int n,m,ans=oo;
int map[N][N];
int er[N],head[M],nex[mm],val[mm],b[mm],cnt;
int f[15][M];

void add(int u,int v,int w)
{
    b[++cnt]=v;
    val[cnt]=w;
    nex[cnt]=head[u];
    head[u]=cnt;
}

int main()
{
    cin>>n>>m;

    for(int i=1;i<=n;i++)
    for(int j=1;j<=n;j++)
    map[i][j]=oo;

    for(int i=1;i<=m;i++)
    {
        int x,y,z;
        cin>>x>>y>>z;
        map[y][x]=map[x][y]=min(map[x][y],z);
    }

    er[0]=1;
    for(int i=1;i<=15;i++)
    er[i]=er[i-1]*2;

    int tu=er[n]-1;
    for(int i=1;i<=tu;i++)
    for(int j=i;j;j=(j-1)&i)
    if(j!=i)
    {
        int sum=0;
        for(int jj=1;jj<=n;jj++)
        if(er[jj-1]&j)
        {
            int mi=oo;
            for(int ii=1;ii<=n;ii++)
            if(er[ii-1]&(i-j))
            mi=min(mi,map[ii][jj]);
            if(mi==oo)
            sum=oo;
            else
            sum+=mi;
        }
        if(sum<oo)
        add(i,j,sum);
    }

    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
        for(int k=0;k<=tu;k++)
        f[j][k]=oo;

        f[1][er[i-1]]=0;
        for(int j=2;j<=n;j++)
        for(int k=1;k<=tu;k++)
        for(int h=head[k];h;h=nex[h])
        f[j][k]=min(f[j][k],f[j-1][k-b[h]]+val[h]*(j-1));

        for(int j=1;j<=n;j++)
        ans=min(ans,f[j][tu]);
    }

    cout<<ans<<endl;

    return 0;
}
深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有忆功能,能够捕捉数据中的时间依赖性。 5. **长短期忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值