首页 > 其他分享 >冲刺国赛模拟 28

冲刺国赛模拟 28

时间:2023-07-01 15:56:35浏览次数:29  
标签:val int sum 28 冲刺 edge 国赛 ans include

一天两个小时踹了两回机箱还把我五道题题解踹没了,我不好说什么。

论坛数学版看到一道高消 dp 的题,第一反应是这是个马尔可夫链可以列矩阵求逆嗯解。我是不是魔怔了。

\[%>特别是当两者科技树点的都很歪而且歪的方向不同的时候。 ——H_Kaguya in 13.5 %你在影射什么我不好说。 \]

k 大值

值域 \(2^{64}\),每 \(2^{16}\) 扫一次统计在值域内的个数,扫四遍出答案。

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
typedef unsigned long long ull;
const int U=(1<<16)-1;
int n,k,cnt[1<<16];
ull ans,t;
ull nxt(ull x){
    x^=(x<<13);
    x^=(x>>17);
    x^=(x<<5);
    return x;
}
int main(){
    scanf("%d%d%llu",&n,&k,&t);ull T=t;
    for(int i=1;i<=n;i++){
        ull x=t;t=nxt(t);
        cnt[(x>>48)&U]++;
    }
    int sum=0;
    for(int i=U;i>=0;i--){
        if(sum<k&&sum+cnt[i]>=k){
            ans|=(ull)i<<48;k-=sum;
            break;
        }
        sum+=cnt[i];
    }
    memset(cnt,0,sizeof(cnt));
    t=T;
    for(int i=1;i<=n;i++){
        ull x=t;t=nxt(t);
        if((x>>48)==(ans>>48))cnt[(x>>32)&U]++;
    }
    sum=0;
    for(int i=U;i>=0;i--){
        if(sum<k&&sum+cnt[i]>=k){
            ans|=(ull)i<<32;k-=sum;
            break;
        }
        sum+=cnt[i];
    }
    memset(cnt,0,sizeof(cnt));
    t=T;
    for(int i=1;i<=n;i++){
        ull x=t;t=nxt(t);
        if((x>>32)==(ans>>32))cnt[(x>>16)&U]++;
    }
    sum=0;
    for(int i=U;i>=0;i--){
        if(sum<k&&sum+cnt[i]>=k){
            ans|=(ull)i<<16;k-=sum;
            break;
        }
        sum+=cnt[i];
    }
    memset(cnt,0,sizeof(cnt));
    t=T;
    for(int i=1;i<=n;i++){
        ull x=t;t=nxt(t);
        if((x>>16)==(ans>>16))cnt[x&U]++;
    }
    sum=0;
    for(int i=U;i>=0;i--){
        if(sum<k&&sum+cnt[i]>=k){
            ans|=(ull)i;k-=sum;
            break;
        }
        sum+=cnt[i];
    }
    printf("%llu\n",ans);
    return 0;
}

染色

超级原题 AGC004F。

函数

感觉最近数学直觉和数字敏感度真的很减退。直接开睡。

首先这题有个结论:\(f(a+2C)=f(a)+2C\)。

证明:考虑设 \(b=2f(a)-a+1,d=2f(b)-b+1\),则 \(f(b)=f(a)+C,f(d)=f(a)+2C\)。于是 \(d=2f(a)+2C-2f(a)+a-1+1=a+2C\)。

于是只需确定在 \([0,2C)\) 内的函数值。

然后考虑 \(b=2f(a)-a+1\),那么 \(a+b=2f(a)-1\),即 \(a,b\) 奇偶性不同。若 \(a,b<2C\) 可以配对,则不管 \(f(a)\) 如何取值,一定有 \(a+b=2f(a)+1-2nC\)。设 \(a=2X,b=2Y+1\),则容易得到

\[f(a)=X+Y+nC \]

\[f(b)=X+Y-(n-1)C \]

于是可以枚举 \(X,Y\) 统计每组的价值。现在考虑一对 \((x,y)\) 对一组的贡献:

  1. \(x,a\) 在同组,则 \(x=a+2kC\),设 \(W=X+Y+2kC-y=X+Y+x-a-y\),那么 \(|f(x)-y|=w+nC\)。
  2. \(x,b\) 在同组,则 \(x=b+2kC\),设 \(W=-X-Y-2kC-C+y=-X-Y-x+b-C+y\),则同样有 \(|f(x)-y|=w+nC\)。

只要找到一个 \(n\)。那么显然 \(-nC\) 一定要接近 \(w\) 的中位数,从而可以 \(O(nC)\) 地算出所有 \((X,Y)\) 的权值。然后现在就变成了选若干 \(X,Y\) 匹配,直接 KM 或者费用流即可。这题卡 SPFA,要原始对偶。

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <vector>
#include <queue>
#define int long long
using namespace std;
const int inf=0x3f3f3f3f3f3f3f3f;
int n,C,ans,cost,S,T,h[1010];
struct node{
    int x,y;
    bool operator<(const node&s)const{
        return x<s.x;
    }
}A[10010];
vector<int>v[610];
struct gra{
    int u,v,w,val,next;
    int getval(){
        return h[u]-h[v]+val;
    }
}edge[200010];
int t=1,head[100010];
void Add(int u,int v,int w,int val){
    edge[++t].v=v;edge[t].u=u;edge[t].w=w;edge[t].val=val;edge[t].next=head[u];head[u]=t;
}
void add(int u,int v,int w,int val){
    Add(u,v,w,val);Add(v,u,0,-val);
}
int dis[1010],pre[1010],flow[1010];
bool vis[1010];
struct stu{
    int x,w;
    bool operator<(const stu&s)const{
        return w>s.w;
    }
};
priority_queue<stu>q;
bool dijkstra(int s,int t){
    for(int i=0;i<=T;i++)dis[i]=0x3f3f3f3f3f3f3f3f,vis[i]=false,flow[i]=0;
    q.push({s,0});
    dis[s]=0;flow[s]=0x3f3f3f3f3f3f3f3f;
    while(!q.empty()){
        int x=q.top().x;q.pop();
        if(!vis[x]){
            vis[x]=true;
            for(int i=head[x];i;i=edge[i].next){
                if(edge[i].w&&dis[edge[i].v]>dis[x]+edge[i].getval()){
                    dis[edge[i].v]=dis[x]+edge[i].getval();
                    flow[edge[i].v]=min(flow[x],edge[i].w);
                    pre[edge[i].v]=i;
                    q.push({edge[i].v,dis[edge[i].v]});
                }
            }
        }
    }
    if(flow[t]==0)return false;
    for(int x=t;x!=s;x=edge[pre[x]].u)edge[pre[x]].w-=flow[t],edge[pre[x]^1].w+=flow[t];
    return true;
}
int val[10010];
int calc(int x){
    int ans=0;
    for(int i=1;i<=val[0];i++)ans+=abs(val[i]-x*C);
    return ans;
}
signed main(){
    scanf("%lld%lld",&n,&C);S=0,T=C<<1|1;
    for(int i=1;i<=C;i++)add(S,i,1,0),add(C+i,T,1,0);
    for(int i=1;i<=n;i++)scanf("%lld%lld",&A[i].x,&A[i].y),v[A[i].x%(C<<1)].push_back(i);
    for(int x=0;x<C;x++){
        for(int y=0;y<C;y++){
            int a=x<<1,b=y<<1|1;val[0]=0;
            for(int p:v[a])val[++val[0]]=x+y+A[p].x-a-A[p].y;
            for(int p:v[b])val[++val[0]]=-x-y-A[p].x+b-C+A[p].y;
            sort(val+1,val+val[0]+1);
            int mid=(val[0]+1)>>1,ret=val[mid]/C;
            int d=min({calc(ret-1),calc(ret),calc(ret+1)});
            add(x+1,C+y+1,1,d);
        }
    }
    memset(h,0x3f,sizeof(h));
    h[S]=0;
    for(int i=head[S];i;i=edge[i].next){
        if(edge[i].w)h[edge[i].v]=min(h[edge[i].v],0ll);
    }
    for(int x=1;x<=(C<<1);x++){
        for(int i=head[x];i;i=edge[i].next){
            if(edge[i].w)h[edge[i].v]=min(h[edge[i].v],h[x]+edge[i].val);
        }
    }
    if(h[T]==inf){
        puts("0");return 0;
    }
    while(dijkstra(S,T)){
        for(int i=0;i<=T;i++)h[i]+=dis[i];
        ans+=flow[T];cost+=flow[T]*h[T];
    }
    printf("%lld\n",cost);
    return 0;
}

标签:val,int,sum,28,冲刺,edge,国赛,ans,include
From: https://www.cnblogs.com/gtm1514/p/17519387.html

相关文章

  • 国标GB28181协议客户端开发(三)查询和实时视频画面
    国标GB28181协议客户端开发(三)查询和实时视频画面本文是《国标GB28181协议设备端开发》系列的第三篇,探讨了信息查询和实时视频在GB28181协议中的应用。首先,介绍了设备目录查询、设备信息查询和设备状态查询三个重要的信息查询功能,并详细解释了它们在协议中的信令交互流程。随后,深......
  • 【雕爷学编程】Arduino动手做(144)---KA2284 电平模块
    37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来—小小的进步或是搞......
  • LCD12864单色屏任意位置显示文字图片功能,不在受限于8bit的分行
    /*取模软件image2Lcdv2.9液晶取模方式:扫描方式:数据水平,字节垂直输出灰度:单色最大宽度和高度:128*64字节内像素数据反序*/#defineLCD_REVERSE_FLAG0#defineLCD_DISPLAY_NORMAL0#defineLCD_DISPLAY_REVERSE1#defineLCD_BUFF_BYTE_MAX1024#defineSCREEN_WIDT......
  • 基于DSP28335的三电平有源电力滤波器完整的软硬件资料
    完整的软硬件资料,其中包括两套基于DSP28335的三电平有源电力滤波器。这些资料可以直接使用。提取的知识点和领域范围:-三电平有源电力滤波器-DSP28335芯片原创文章,转载请说明出处,资料来源:http://imgcs.cn/5c/690782316603.html延申科普:三电平有源电力滤波器是一种用于电力系......
  • 设备通过GB28181接入EasyCVR,设备列表多出一层目录是什么原因?
    EasyCVR平台基于云边端协同架构,可支持多协议、多类型的海量设备接入与分发,平台既具备传统安防视频监控的能力,也能接入AI智能分析的能力,在线下均有大量应用。EasyCVR平台可提供的视频能力包括:视频监控直播、云端录像、云存储、录像检索与回看、智能告警、平台级联、云台控制、语音......
  • 2023冲刺国赛模拟 27.1
    话说我的习惯是一套题全部改完后才写题解,然而上次的题解停留在\(20.1\),这足以看出近两日的颓废现状。由于昨天晚上做了个噩梦,所以今天的题解先扯点别的。目前初步鉴定噩梦是由FateZero中Caster的行为引起的。比较显然Caster及其御主都是以他人的痛苦为乐的人。在现代......
  • 【雕爷学编程】Arduino动手做(138)---64位WS2812点阵屏模块
    37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来—小小的进步或是搞......
  • XSS(0628)
    xss盲打#搜索框中搜索<script>alert(/xss/)</script><script>confirm(/xss/);</script><script>confirm('xss');</script><script>prompt('xss');</script>固定会话攻击进入xss平台创建项目项目配置完成后打开项目代码将代码插入......
  • 江西服务器出租,游戏服务器配置该如何选择?103.219.28.X
    江西服务器的稳定性和安全性虽说没有宁波和杭州的那么好,但是机器的应用领域也是不同的,目前江西有3大数据中心,江西南昌电信机房、新余数据中心和吉安电信机房。江西南昌机房经过数年的发展与扩容,截止2011年12月出口带宽总量已达200G,托管设备3000多台。新余数据中心有骨干光缆直连Chi......
  • 6.28工作——智能隧道监测管理平台技术方案书
    智能隧道监测管理平台技术方案书一、概述1.1项目背景隧道作为交通网络的重要组成部分,其安全性对公众和交通运输行业至关重要。实施有效的隧道监测管理可以确保隧道的正常运行、提前预警潜在风险和快速应对事故事件,从而减少交通拥堵、避免人员伤亡和财产损失。面对这种现状,我公......