noip模拟33
阅读原文时间:2022年07月06日阅读:1

\(\color{white}{\mathbb{失足而坠千里,翻覆而没百足,名之以:深渊}}\)


这场考试的时间分配非常不科学

开题试图想 \(t1\) 正解,一个半小时后还是只有暴力,特别惊慌失措

然后赶紧看 \(t2\),看题发现是个简单的线段树合并,没有多模样例,半个小时打完结论后发现能过样例,也没对拍就直接放下了

然后最后一个小时硬想 \(t3\),写了一个复杂度比较正确的网络流上去,发现有好多漏洞,然后一直调,最后考试结束的时候甚至暴力都没来得及打


A. Hunter

玄妙的概率题

如果从第几个猎人在第几轮死的概率考虑,发现很难维护,因为当前值的总和未知

一个很妙的方法是利用成比例的性质,可以计算出每一个猎人比第一个先死的概率,即 \(\displaystyle\frac{w_i}{w_1+w_i}\),那么总和+1即为第一个猎人死的期望


B. Defence

线段树合并的裸题,注意答案是 \(min(lmax+rmax,maxx)\)

还要注意每个点的法术可能有多个


C. Connect

数据范围特别小,一看是状压

题意可以理解为选取一条1到n的链,所有已选点集最多和链上的一个点相连

\(f[S][i]\) 表示已选集合为 \(S\),链上最后一个点是 \(i\) 的已选边权和的最大值

那么每次可以新加入一个点,延长链的长度

也可以新增一个集合,作为链旁边的点集

转移即可,最后用总边权减去即可

代码实现

#include<bits/stdc++.h>
using namespace std;
const int maxn=20,maxm=5e4+5;
const int inf=0xcfcfcfcf;
int n,m,cnt,hd[maxn],x,y,w,val[maxn][maxn],tot,limit,f[maxm][maxn],ans,sum[maxm],con[maxm][maxn],sta[maxn],tp;
int read(){
    int x=0,f=1;
    char ch=getchar();
    while(!isdigit(ch)){
        if(ch=='-')f=-1;
        ch=getchar();
    }
    while(isdigit(ch)){
        x=x*10+ch-48;
        ch=getchar();
    }
    return x*f;

    博客园Logo
    首页
    新闻
    博问
    专区
    闪存
    班级

    写随笔
    我的博客
    短消息
    用户头像
    我的博客
    我的园子
    账号设置
    简洁模式
    退出登录

返回主页
y_cx

    博客园
    首页
    新随笔
    联系
    管理
    订阅
    订阅

随笔- 26  文章- 0  评论- 12  阅读- 864
noip模拟32

山高而青云冷,池深而蛟穴昏,行以慎步,援以轻身,名之以:落石

pic.png

开题发现 t1

80分特别好写,于是先写了
但是这个做法没有任何扩展性,导致一直没有往正解的方向想

t3
看见有点的坐标,以为是计算几何,于是写完 t1 打了个暴力就看 t2 了
但事实证明 t2

的难度实际上是最大的,这次题目难度的判断又出现了严重的失误
A. Smooth

观察 B=2 的情况,发现排好序两因子的次数递增是没有规律的
可以把两个因子都开个队列,每次队里是单调递增的,所以队首是最小值
每次取出所有队首中的最小值,即使下一个排名的光滑数
然后运用类似线性筛的东西给每个大于其最小质因子的数加入其乘质数的值
B. Six

首先,要肯定这道题状态只统计每个质因子出现了几次是不行的,比如第一次插入一个6,那么2和3都被标记出现一次,当另一个6来时,发现其因子共出现两次而不能加入序列导致判断出错

所以需要改进状态
那么对于6来说,不能加入的条件是出现过两个2,或两个3,或1个2或1个3
那么不妨记录状态时一对儿一对儿记,这样可以解决上面的尴尬问题
发现总状态数很多,但是有用状态很少,可以记录在 map 里进行离散

可以记忆化搜索,但是感觉不好理解,所以采用递推的写法,每次更新一层,把每层有用的状态放进 vector 里更新即可
代码实现
C. Walker

为什么又是解方程题……

把式子展开,发现有 scale∗sin
,scale∗cos,dx,dy 四个未知数,选取两个点即可解出来
如果 n2

枚举可以保证正确性
但是每次随机两个值,多次循环后不对的概率会降到极低

解出 sin
,cos 的值后可以使用 acos 这个函数解出弧度值,注意正负性不确定需要用 sin

进行验证

又恐琼楼玉宇,高处不胜寒

标签: 考试
好文要顶 关注我 收藏该文
y_cx
关注 - 25
粉丝 - 19
0
0
« 上一篇: noip模拟31
» 下一篇: noip模拟33
posted @ 2021-08-07 21:21  y_cx  阅读(8)  评论(0)  MD  编辑  收藏  举报
刷新评论刷新页面返回顶部
发表评论
编辑 预览

自动补全

退出

[Ctrl+Enter快捷键提交]
【推荐】百度智能云2021普惠上云节:新用户首购云服务器低至0.7折
【推荐】阿里云云大使特惠:新用户购ECS服务器1核2G最低价87元/年
【推荐】大型组态、工控、仿真、CAD\GIS 50万行VC++源码免费下载!
编辑推荐:
· [.Net] 进程间通信框架(基于共享内存)——SimpleMMF
· [.NET大牛之路 006] 了解 Roslyn 编译器
· 源码 | “@Value 注入失败”引发的一系列骚操作
· Redis挂了,流量把数据库也打挂了,怎么办?
· 五个 .NET 性能小贴士
大数据与数据科学实战课程-468x60-3
最新新闻:
· “中国短视频第一股”,为何上市以来一路狂跌?
· PS3 模拟器加入对 FSR 的支持
· WireGuard 宣布 Windows 下的内核模式实现 WireGuardNT
· 爆出惊天大瓜!阿里需要马云归来?
· 国际空间站捕捉到“颠倒闪电” 网友:有《流浪地球》那味儿了
» 更多新闻...
昵称: y_cx
园龄: 8个月
粉丝: 19
关注: 25
<     2021年8月     >
日     一   二   三   四   五   六
1     2   3   4   5   6   7
8     9   10  11  12  13  14
15     16  17  18  19  20  21
22     23  24  25  26  27  28
29     30  31  1   2   3   4
5     6   7   8   9   10  11
搜索

常用链接

    我的随笔
    我的评论
    我的参与
    最新评论
    我的标签

我的标签

    考试(17)
    游记(2)
    学习笔记(1)
    杂题(1)
    每周讲题(1)

随笔档案

    2021年8月(6)
    2021年7月(11)
    2021年6月(2)
    2021年5月(3)
    2021年4月(3)
    2020年11月(1)

最新评论

    1. Re:noip模拟31

    %%%%%
    --keen_z
    2. Re:noip模拟30

    %%%%%
    ---OMA-
    3. Re:NOI2021 游记

    %%%
    --SDFZOI
    4. Re:noip模拟29

    %%%
    ---OMA-
    5. Re:NOI2021 游记

    %%%
    --SpadeA261

阅读排行榜

    1. NOI2021 游记(369)
    2. noip模拟测试18(45)
    3. noip模拟测试17(39)
    4. noip模拟12(35)
    5. 联赛测试2 3.25(25)

评论排行榜

    1. NOI2021 游记(4)
    2. noip模拟测试18(3)
    3. noip模拟31(1)
    4. noip模拟30(1)
    5. noip模拟29(1)

推荐排行榜

    1. noip模拟30(2)
    2. noip模拟29(2)
    3. noip模拟31(1)
    4. 构造(1)
    5. NOI2021 游记(1)

Copyright  2021 y_cx
Powered by .NET 5.0 on Kubernetes

}
struct Edge{
    int nxt,from,to,val;
}edge[maxm];
void add(int u,int v,int w){
    edge[++cnt].nxt=hd[u];
    edge[cnt].to=v;
    edge[cnt].from=u;
    edge[cnt].val=w;
    hd[u]=cnt;
    return ;
}
void calc(int x){
    tp=0;
    while(x)sta[++tp]=(x%2),x>>=1;
    for(int i=n+1;i>=1;i--)cout<<sta[i];
    return ;
}
int main(){
    n=read();
//    calc(1);
//    cout<<endl;
//    calc(6),cout<<endl;
    m=read();
    for(int i=1;i<=m;i++){
        x=read();
        y=read();
        w=read();
        add(x,y,w);
        add(y,x,w);
        tot+=w;
        val[x][y]=val[y][x]=w;
    }
    limit=(1<<n)-1;
    for(int S=1;S<=limit;S++){
        for(int i=1;i<=cnt;i++){
            int u=edge[i].from;
            int v=edge[i].to;
            if((S&(1<<(u-1)))&&(S&(1<<(v-1))))sum[S]+=edge[i].val;
            if((S&(1<<(u-1)))&&(!(S&(1<<(v-1)))))con[S][v]+=edge[i].val;
        }
        sum[S]/=2;
    }
    memset(f,0xcf,sizeof f);
    f[1][1]=0;
    for(int S=1;S<=limit;S++){
//        calc(S);
//        cout<<endl;
        for(int i=1;i<=n;i++){
            if(f[S][i]==inf)continue;
            for(int j=hd[i];j;j=edge[j].nxt){
                int v=edge[j].to;
                if(S&(1<<(v-1)))continue;
//                if(con[S^(1<<(i-1))][v])continue;
                f[S|(1<<(v-1))][v]=max(f[S|(1<<(v-1))][v],f[S][i]+edge[j].val);
            }
            int SS=limit^S;
//            if(S==1&&i==1)calc(SS),cout<<endl;
            for(int T=SS;T;T=(T-1)&SS){
//                if(S==1&&i==1)cout<<"ppp "<<T<<" ",calc(T),cout<<endl;
                f[S|T][i]=max(f[S|T][i],f[S][i]+sum[T]+con[T][i]);
            }
        }
    }
    cout<<sum[limit]-f[limit][n];
    return 0;
} 

\(\color{white}{\mathbb{无可奈何花落去,似曾相识燕归来。}}\)

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器

你可能感兴趣的文章