[ICPC2024 Xi‘an I] ICPC2024 邀请赛西安站(7/8/13)

心得

[ICPC2024 Xi'an I] ICPC2024 邀请赛西安站重现赛 - 比赛详情 - 洛谷

7表示赛时ac了7个,8表示含补题总共ac数,13表示题目总数

题目

M. Chained Lights

打表,发现只有k=1是YES

//#include <bits/stdc++.h>
#include<iostream>
#include<cstdio>
#include<vector>
#include<map>
using namespace std;
#define rep(i,a,b) for(int i=(a);i<=(b);++i)
#define per(i,a,b) for(int i=(a);i>=(b);--i)
typedef long long ll;
typedef double db;
typedef pair<int,int> P;
#define fi first
#define se second
#define pb push_back
#define dbg(x) cerr<<(#x)<<":"<<x<<" ";
#define dbg2(x) cerr<<(#x)<<":"<<x<<endl;
#define SZ(a) (int)(a.size())
#define sci(a) scanf("%d",&(a))
#define pt(a) printf("%d",a);
#define pte(a) printf("%d\n",a)
#define ptlle(a) printf("%lld\n",a)
#define debug(...) fprintf(stderr, __VA_ARGS__)
using namespace std;
const int N=1e6+10;
int t,n,k,fac[N],sum[N],light[N];
void press(int x)
{light[x]^=1;for (int y=x+x;y<=n;y+=x) press(y);
}
int main(){sci(t);while(t--){sci(n),sci(k);puts(k==1?"YES":"NO");}return 0;
}

J. Triangle

数三角形,手玩发现一些规律,

比如:n=3,m=9实际是15,然后发现和gcd有关

//#include <bits/stdc++.h>
#include<iostream>
#include<cstdio>
#include<vector>
#include<map>
using namespace std;
#define rep(i,a,b) for(int i=(a);i<=(b);++i)
#define per(i,a,b) for(int i=(a);i>=(b);--i)
typedef long long ll;
typedef double db;
typedef pair<int,int> P;
#define fi first
#define se second
#define pb push_back
#define dbg(x) cerr<<(#x)<<":"<<x<<" ";
#define dbg2(x) cerr<<(#x)<<":"<<x<<endl;
#define SZ(a) (int)(a.size())
#define sci(a) scanf("%d",&(a))
#define pt(a) printf("%d",a);
#define pte(a) printf("%d\n",a)
#define ptlle(a) printf("%lld\n",a)
#define debug(...) fprintf(stderr, __VA_ARGS__)
using namespace std;
const int N=1e6+10;
int a,b;
ll gcd(ll a,ll b){return !b?a:gcd(b,a%b);
}
int main(){sci(a),sci(b);// if(a==b){//     printf("%lld\n",1ll*a*(a+1)/2);// }// else{ll v=gcd(a,b);ptlle((1ll*a*b-1ll*v*(a/v)*(b/v))/2+1ll*((a/v)*(b/v)+1)/2*v);//}return 0;
}
/*
3 9 = 15
*/

D. Make Them Straight

枚举k,根据ai-i*k确定能在同一个序列里的子序列,子序列里的是不改的

首项得是正的,后面i*k>1e6说明一定要改

剪枝一下复杂度是可接受的O(klogn)

//#include <bits/stdc++.h>
#include<iostream>
#include<cstdio>
#include<vector>
#include<map>
using namespace std;
#define rep(i,a,b) for(int i=(a);i<=(b);++i)
#define per(i,a,b) for(int i=(a);i>=(b);--i)
typedef long long ll;
typedef double db;
typedef pair<int,int> P;
#define fi first
#define se second
#define pb push_back
#define dbg(x) cerr<<(#x)<<":"<<x<<" ";
#define dbg2(x) cerr<<(#x)<<":"<<x<<endl;
#define SZ(a) (int)(a.size())
#define sci(a) scanf("%d",&(a))
#define pt(a) printf("%d",a);
#define pte(a) printf("%d\n",a)
#define ptlle(a) printf("%lld\n",a)
#define debug(...) fprintf(stderr, __VA_ARGS__)
using namespace std;
const int N=2e5+10;
int n,a[N],b[N];
map<ll,ll>mp;
ll sum,ans;
int main(){sci(n);rep(i,0,n-1)sci(a[i]);rep(i,0,n-1){sci(b[i]);sum+=b[i];}ans=sum;rep(k,0,1000000){mp.clear();ll res=0;rep(i,0,n-1){ll v=a[i]-1ll*i*k;if(1ll*i*k>1000000)break;if(v<0)continue;mp[v]+=b[i];res=max(res,mp[v]);//if(mp[v]==9)printf("i:%d v:%lld mp:%lld\n",i,v,mp[v]);}ans=min(ans,sum-res);}ptlle(ans);return 0;
}
/*
3 9 = 15
*/

L. Rubbish Sorting

二进制子集枚举一下,大概sosdp的思想,因为|s|<=5

#include <bits/stdc++.h>
#include<iostream>
#include<cstdio>
#include<vector>
#include<map>
using namespace std;
#define rep(i,a,b) for(int i=(a);i<=(b);++i)
#define per(i,a,b) for(int i=(a);i>=(b);--i)
typedef long long ll;
typedef double db;
typedef pair<int,int> P;
#define fi first
#define se second
#define pb push_back
#define dbg(x) cerr<<(#x)<<":"<<x<<" ";
#define dbg2(x) cerr<<(#x)<<":"<<x<<endl;
#define SZ(a) (int)(a.size())
#define sci(a) scanf("%d",&(a))
#define pt(a) printf("%d",a);
#define pte(a) printf("%d\n",a)
#define ptlle(a) printf("%lld\n",a)
#define debug(...) fprintf(stderr, __VA_ARGS__)
using namespace std;
const int N=2e5+10,M=2e7+10,INF=0x3f3f3f3f;
int q,n,op,x,y,bs[8];
char s[N];
int val[M],now=INF;
int main(){memset(val,INF,sizeof val);bs[0]=1;rep(i,1,6)bs[i]=bs[i-1]*28;sci(q);while(q--){sci(op);scanf("%s",s);n=strlen(s);if(op==1){sci(y);int w=0;rep(i,0,n-1){int v=s[i]-'a'+1;w+=v*bs[i];}val[w]=min(val[w],y);now=min(now,y);rep(p,1,n){int up=(1<<p)-1;rep(i,0,up-1){int w=0;rep(j,0,p-1){int z=i>>j&1,v=0;if(z)v=27;else v=(s[j]-'a'+1);w+=v*bs[j];}val[w]=min(val[w],y);}}}else{int w=0;rep(i,0,n-1){int v=s[i]-'a'+1;w+=v*bs[i];}if(val[w]!=INF){pte(val[w]);continue;}vector<int>mn(n+1,INF);mn[n]=now;rep(p,1,n){int up=(1<<p)-1;rep(i,0,up-1){int w=0,tot=0;rep(j,0,p-1){int z=i>>j&1,v=0;if(z)v=27,tot++;else v=(s[j]-'a'+1);w+=v*bs[j];}mn[tot+n-p]=min(mn[tot+n-p],val[w]);}}rep(i,0,n){if(mn[i]!=INF){//printf("i:%d mn:%d\n",i,mn[i]);pte(mn[i]);break;}}}}return 0;
}
/*
3 9 = 15
*/

B. Turn Off The Lights(构造)

最终一定是和某一列完全相同/完全相反的,

不妨和第i列完全相同,全是01011,那么再把这三列的1按列取消掉就可以了

所以枚举和哪列相同,bitset加速统计,复杂度O(n^3/64)

#include <bits/stdc++.h>
#include<iostream>
#include<cstdio>
#include<vector>
#include<map>
using namespace std;
#define rep(i,a,b) for(int i=(a);i<=(b);++i)
#define per(i,a,b) for(int i=(a);i>=(b);--i)
typedef long long ll;
typedef double db;
typedef pair<int,int> P;
#define fi first
#define se second
#define pb push_back
#define dbg(x) cerr<<(#x)<<":"<<x<<" ";
#define dbg2(x) cerr<<(#x)<<":"<<x<<endl;
#define SZ(a) (int)(a.size())
#define sci(a) scanf("%d",&(a))
#define pt(a) printf("%d",a);
#define pte(a) printf("%d\n",a)
#define ptlle(a) printf("%lld\n",a)
#define debug(...) fprintf(stderr, __VA_ARGS__)
using namespace std;
const int N=1e3+10;
int n,k,a[N][N],sum[N];
bitset<1005>b[2][N];
bool flip[N];
bool ck(int i){int sum=0;rep(j,1,n){if(j==i)continue;int s1=(b[1][i]^b[0][j]).count(),s2=(b[0][i]^b[0][j]).count();if(s1<s2)flip[j]=1;else flip[j]=0;sum+=min(s1,s2);}return sum<=k;
}
void out(int i){//printf("i:%d\n",i);vector<P>ans;rep(j,1,n){if(j==i)continue;if(flip[j])ans.pb(P(j,0));rep(x,1,n){if(flip[j]){if(a[j][x]!=(a[i][x]^1))ans.pb(P(j,x));}else{if(a[j][x]!=a[i][x])ans.pb(P(j,x));}}}rep(x,1,n){if(a[i][x])ans.pb(P(0,x));}pte(SZ(ans));for(auto x:ans){printf("%d %d\n",x.fi,x.se);}
}
int main(){sci(n),sci(k);rep(i,1,n){rep(j,1,n){sci(a[i][j]);if(a[i][j])b[0][i].set(j);else b[1][i].set(j);}}rep(i,1,n){rep(x,0,1){if(ck(i)){out(i);return 0;}}}puts("-1");return 0;
}
/*
3 9 = 15
*/

F. XOR Game(博弈)

先从大到小考虑ai=1的值,z是0的个数算最小的数

因为操作一次就可以获得收益/ban掉对应收益,所以alice和bob会先抢这部分

剩下的局面,尽可能避免2的出现, 全是2的情况,谁先操作谁就输了,

所以判一下剩下局面的奇偶性,奇数alice全取,偶数bob全ban

#include <bits/stdc++.h>
#include<iostream>
#include<cstdio>
#include<vector>
#include<map>
using namespace std;
#define rep(i,a,b) for(int i=(a);i<=(b);++i)
#define per(i,a,b) for(int i=(a);i>=(b);--i)
typedef long long ll;
typedef double db;
typedef pair<int,int> P;
#define fi first
#define se second
#define pb push_back
#define dbg(x) cerr<<(#x)<<":"<<x<<" ";
#define dbg2(x) cerr<<(#x)<<":"<<x<<endl;
#define SZ(a) (int)(a.size())
#define sci(a) scanf("%d",&(a))
#define pt(a) printf("%d",a);
#define pte(a) printf("%d\n",a)
#define ptlle(a) printf("%lld\n",a)
#define debug(...) fprintf(stderr, __VA_ARGS__)
using namespace std;
const int N=1e5+10;
int k,z,a[N],b[N],c;
int main(){sci(k);sci(z);rep(i,0,k-1){sci(a[i]);}per(i,k-1,0){if(a[i]==1){c++;if(c&1)b[i]=1;a[i]=0;}}per(i,k-1,0){if(a[i]&1)c++;}c+=(z&1);per(i,k-1,0){if(!a[i])continue;if(c&1)b[i]=1;}per(i,k-1,0){printf("%1d",b[i]);}puts("");return 0;
}
/*
3 9 = 15
*/

I. Smart Quality Inspector(状压dp+区间dp)

避免后效性,肯定是从大到小考虑max值,

被前面的最大值覆盖了的区间,再选最大值时就没有贡献了

dp[S]表示当前最大值已经覆盖的状态是S时的最大代价和

b[i][l][r]表示区间包含第i位且被[l,r]完整包含的区间的数量

新增一位时,往左往右拓展0的区域找到最左最右,这一段的b值对应的区间都是有贡献的

复杂度O(n^5+n*2^n)

#include <bits/stdc++.h>
#include<iostream>
#include<cstdio>
#include<vector>
#include<map>
using namespace std;
#define rep(i,a,b) for(int i=(a);i<=(b);++i)
#define per(i,a,b) for(int i=(a);i>=(b);--i)
typedef long long ll;
typedef double db;
typedef pair<int,int> P;
#define fi first
#define se second
#define pb push_back
#define dbg(x) cerr<<(#x)<<":"<<x<<" ";
#define dbg2(x) cerr<<(#x)<<":"<<x<<endl;
#define SZ(a) (int)(a.size())
#define sci(a) scanf("%d",&(a))
#define pt(a) printf("%d",a);
#define pte(a) printf("%d\n",a)
#define ptlle(a) printf("%lld\n",a)
#define debug(...) fprintf(stderr, __VA_ARGS__)
using namespace std;
const int N=25,M=(1<<20)+5,INF=0x3f3f3f3f;
int n,k,m,l,r,a[N][N],b[N][N][N],dp[M];
void upd(int &x,int y){x=min(x,y);
}
int main(){sci(n),sci(k),sci(m);rep(i,1,m){sci(l),sci(r);a[l][r]++;}rep(i,1,n){rep(l,1,i){rep(r,i,n){rep(x,l,i){rep(y,i,r){b[i][l][r]+=a[x][y];}}}}}memset(dp,INF,sizeof dp);dp[0]=0;int up=(1<<n)-1;rep(i,0,up){vector<int>pre(n,-1),suf(n,n);int now=-1,bit=0;rep(j,0,n-1){int v=i>>j&1;if(v==1)now=j,bit++;else pre[j]=now+1;}now=n;per(j,n-1,0){int v=i>>j&1;if(v==1)now=j;else{suf[j]=now-1;int x=j+1,y=pre[j]+1,z=suf[j]+1;upd(dp[i|(1<<j)],dp[i]+b[x][y][z]*max(k-bit,0));}}}pte(dp[up]);return 0;
}

赛后补题

G. The Last Cumulonimbus Cloud(拓扑排序好题)

任意非空子图都有一个度不超过10的点=可以把度>10的点的贡献都归到这些不超过10的点上

拓扑排序每删掉一个度数不足10的点就会多出一个不足10的点

最后图可以化成一个联通且每个点出度均不超过10的dag

u加的时候把贡献推到u的下游

u算的时候上游已经推给过u,只需要再加上u的所有下游的贡献

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/21578.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mysql 技术实战篇

命令行 导出 - -h localhost&#xff1a;指定MySQL服务器的主机地址为本地主机。如果MySQL服务器在其他主机上&#xff0c;请将localhost替换为相应的主机地址。 - -u username&#xff1a;指定连接MySQL服务器的用户名。将username替换为您的有效用户名。 - -p&#xff1a;提…

Makefile教程(附通用模板)

工程目录 工程目录如图&#xff0c;build文件夹是编译出来的 . ├── app │ ├── imx6ul.lds │ ├── main.c │ ├── makefile │ └── start.S ├── bsp │ ├── clk │ │ ├── bsp_clk.c │ │ └── bsp_clk.h │ ├── delay │…

软考 系统架构设计师系列知识点之SOME/IP与DDS(1)

本文内容参考&#xff1a; 车载以太网 - SOME/IP简介_someip-CSDN博客 https://zhuanlan.zhihu.com/p/369422441 什么是SOME/IP?_someip-CSDN博客 SOME/IP 详解系列&#xff08;1&#xff09;—— 概述_some ip-CSDN博客 深入浅出SOME/IP协议&#xff1a;基本概念和原理-…

天童教育:停止内耗放松身心

如果一个人经常从自己身上找原因&#xff0c;经常揽下他人的过错的责任&#xff0c;总是自我怀疑自我否定&#xff0c;认为自己不值得被爱。当被人误解时会在心里悄悄附和&#xff0c;责怪自己。缺乏自信&#xff0c;没办法和他人有正常的交往&#xff0c;长期处于身心疲惫的状…

Python与Python3的区别:深度剖析与全面解读

Python与Python3的区别&#xff1a;深度剖析与全面解读 在编程领域&#xff0c;Python和Python3是两个常被提及的版本&#xff0c;它们之间既存在相似之处&#xff0c;又有着显著的区别。本文将从四个方面、五个方面、六个方面和七个方面&#xff0c;深入剖析Python与Python3之…

OJ3376无尽的石头问题

答案&#xff1a; #include<bits/stdc.h> using namespace std; const int N10e7; int fx(int n) {int sum0;while(n){sum(n%10);n/10;}return sum; } int main() {int t,n,x;cin>>t;while(t--){cin>>n;int count0;for(int i1;i<N;){if(in){cout<<…

在github上创建(上传、关联)自已的项目

目录 创建一个github项目并进行开发。 1.github创建空项目 2. git clone 项目 3. 将项目关联 创建一个github项目并进行开发。 1.github创建空项目 右边的New 然后按步创建就行 2. git clone 项目 复制这个连接 然后在终端&#xff1a;git clone [刚才复制的连接] 3. 将…

解读 Explainable Image Similarity Integrating Siamese Networks and Grad-CAM

给出论文&#xff08;Explainable Image Similarity Integrating Siamese Networks and Grad-CAM&#xff09;的内容解读、代码运行说明 论文链接&#xff1a;J. Imaging | Free Full-Text | Explainable Image Similarity: Integrating Siamese Networks and Grad-CAM (mdpi.c…

纯网络的系统能否定级备案?

很多单位想把网络基础设施进行定级备案和测评&#xff0c;但是不知道这样可否&#xff1f; 目前湖北省是可以的。因为根据《定级指南》的术语解释3.2对等级保护对象的定义是包括通信基础设施的&#xff0c;也就是网络基础设施。其他地区目前有的地方可以有的地方不行&#xff…

2024年武汉东湖高新中级职称报名时间是什么时候?

2024年武汉市东湖高新中级职称上半年批次报名已经截止了&#xff0c;下半年东湖高新至少还有一次报名机会&#xff0c;所以各位东湖高新区评职称的朋友们&#xff0c;不要错过这次了。 2024年武汉东湖高新区中级职称报名条件&#xff1a; 1.东湖高新区社保满足1年&#xff0c;近…

进口不锈钢气动输送泵-美国品牌

进口不锈钢气动输送泵是一种利用压缩空气为动力&#xff0c;通过气阀控制进行往复运动&#xff0c;将能量转换为泵的动能&#xff0c;从而实现对液体或固体物料输送的设备。以下是关于进口不锈钢气动输送泵的详细介绍&#xff1a; 一、产品特点 材质优良&#xff1a;主体部分…

seata源码分析(03)_创建代理的过程

seata提供了ProxyUtil工具类为事务组件创建代理对象&#xff0c;在spring环境中&#xff0c;seata提供了GlobalTransactionScanner类和SeataAutoDataSourceProxyCreator为组件创建AOP代理&#xff0c;本文重点分析这两个类。 ProxyUtil io.seata.integration.tx.api.util.Pro…

【中年危机】程序猿自救指南

中年危机&#xff0c;一个听起来就充满挑战的词汇&#xff0c;它不仅仅是一个年龄的标记&#xff0c;更是一个个人成长和职业发展的转折点。 构架个人品牌&#xff1a; 学会打造IP个人品牌是职业生涯中的重要资产。在中年时期&#xff0c;你已经积累了丰富的经验和知识&#x…

golang的http客户端封装

简介 net/http 是 Go 语言标准库的一部分&#xff0c;它提供了创建 HTTP 客户端和服务器的能力。这个包通过简化与 HTTP 协议的交互&#xff0c;让开发者能够方便地构建 HTTP 请求和响应&#xff0c;以及处理路由等任务。 本文以 net/http 包作为底层&#xff0c;封装一个包含…

HTCC电路板是什么,有哪些主要应用领域

HTCC英文名称是High-Temperature Co-Fired Ceramic&#xff0c;又称高温共烧多层陶瓷基板。因其具有导热系数高、耐热性好、热膨胀系数小、机械强度高、绝缘性好、耐腐蚀等优势&#xff0c;是保持高速增加的PCB线路板之一。 SPEA作为专业电路板测试设备方案服务商&#xff0c;公…

FY-SA-20237·8-WhyWeSpin

Translated from the Scientific American, July/August 2023 issue. Why We Spin (我们为什么旋转) Primates may play with reality by twirling around 翻译&#xff1a;灵长类动物有能力通过旋转或旋转运动来操纵或扭曲他们对现实的感知。 解释&#xff1a; “Primates”…

Java生成指定长度验证码

生成指定长度验证码的简单思路在Java中通常涉及以下几个步骤&#xff1a; 1、定义字符池&#xff1a; 首先&#xff0c;需要定义一个包含所有可能字符的字符串&#xff0c;这个字符池通常包括数字(0-9)、大写字母(A-Z)、小写字母(a-z)。 例如&#xff1a; String chars "…

【开发心得】三步本地化部署llama3大模型

目录 第一步&#xff1a;启动ollama 第二步&#xff1a;启动dify 第三步&#xff1a;配置模型&#xff08;截图&#xff09; 最近llama3很火&#xff0c;本文追击热点&#xff0c;做一个本地化部署的尝试&#xff0c;结果还成功了&#xff01; 当然也是站在别人的肩膀上&…

【运维项目经历|027】PXE自动化部署与管理平台

&#x1f341;博主简介&#xff1a; &#x1f3c5;云计算领域优质创作者 &#x1f3c5;2022年CSDN新星计划python赛道第一名 &#x1f3c5;2022年CSDN原力计划优质作者 &#x1f3c5;阿里云ACE认证高级工程师 &#x1f3c5;阿里云开发者社区专…

Nginx企业级负载均衡:技术详解系列(18)—— 作为上传服务器

你好&#xff0c;我是赵兴晨&#xff0c;97年文科程序员。 在上一期的技术分享中&#xff0c;我们探讨了如何高效搭建Nginx下载服务器&#xff0c;并讨论了长连接优化策略。那么今天&#xff0c;咱们进一步了解Nginx的另一面——作为上传服务器的配置技巧。 作为上传服务器&a…