2024杭电8

2024-09-05 09:20
文章标签 2024 杭电

本文主要是介绍2024杭电8,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1004.cats 的重力拼图

题意:
有一个n*m的矩阵,给出最开始拼图的位置。
可以有四个选择,设置重力的方向,就是拼图会向一个方向竖直掉落到最底。
问任意操作次数后拼图走过的方格数量最大值。

题解:
首先已经在边缘的拼图,只能沿着边走一圈,再判断最开始可以朝哪个方向移动是最大值。

代码:

#include<bits/stdc++.h>
using namespace std;
typedef __int128 i128;
typedef long long ll;
typedef double db;const db PI = acos(-1);
typedef array<ll, 2> PII; // vector<PII> a(n + 1);
const ll inf = 2e18 + 10;
const int mod = 998244353;
const int maxn = 2e5 + 10;
bool multi = 1;void Solve() {ll n, m, a, b; cin >> n >> m >> a >> b;if(n == 1 || m == 1) {cout << n * m << "\n";return ;        }ll ans = n * 2 + m * 2 - 4;ll summ = 0;if(a > 1 && a < n) summ = max(m - 2, summ);if(b > 1 && b < m) summ = max(n - 2, summ);cout << ans + summ << "\n";
}signed main() {// freopen("test.in","r",stdin);  // freopen("code.out","w",stdout);    ios::sync_with_stdio(false);cin.tie(0); cout.tie(0);ll T = 1;if(multi) cin >> T;while(T -- ) {Solve();}return 0;
}

1007.cats 的 k-xor

题意:
给定 a , b , c a,b,c a,b,c,使 a a a b b b不进位 k k k进制加法等于 c c c
不进位 k k k进制加法就是 a a a b b b k k k进制数,每一位相加,但是不进位。
问有多少不同的 k k k,假如有无数种可能性,就输出 − 1 -1 1

题解:
首先 a + b = c a+b=c a+b=c时就是 − 1 -1 1,因为只要 k k k足够大,没有进位就行了。
a + b < c a+b<c a+b<c答案是0,因为不进位加法只会变小,不会变大。

损失的值是 a + b − c a+b-c a+bc,损失的值都是 k k k进制的某一位值,所有肯定也是k的倍数,那我们就枚举 a + b − c a+b-c a+bc的因数为 k k k,判断一下是否符合要求。

代码:

#include <bits/stdc++.h>
#ifndef ONLINE_JUDGE
//#include "_my_utils.h" 
#endif// #define int long long
#define new _MY_NEW_using namespace std;
using ll = long long;
using PII = array<int, 2>;constexpr long long INF = 2E18 + 10;
constexpr int N = 4E4 + 10;
int s[N];
void SINGLE_TEST() 
{int a,b,c;cin>>a>>b>>c;// a=b=c=100000000;if(a+b==c){cout<<-1<<"\n";return ;}if(a+b<c){cout<<"0\n";return ;}// auto ch=[&](int k,int x){//     vector<int> res;//     while(x>0){//         res.push_back(x%k);//         x/=k;//     }//     return res;// };int ans=0;// int cnt=0;int xx=a+b-c,cnt=0;for(int i=2;i*i<=xx;i++){if(xx%i==0){s[++cnt]=i;if(xx/i!=i){s[++cnt]=xx/i;}}}s[++cnt]=xx;for(int j=1;j<=cnt;j++){int i=s[j];vector<int> x,y,z;int aa=a,bb=b,cc=c;int k=i;while(aa>0){x.push_back(aa%k);aa/=k;// cnt++;}while(bb>0){y.push_back(bb%k);bb/=k;// cnt++;}while(cc>0){z.push_back(cc%k);cc/=k;// cnt++;}auto sz=max({x.size(),y.size(),z.size()});while(x.size()<sz)x.push_back(0);while(y.size()<sz)y.push_back(0);while(z.size()<sz)z.push_back(0);// debug(x);debug(y);debug(z);bool ok=1;for(int j=0;j<sz;j++){// cnt++;if((x[j]+y[j])%i!=z[j]){ok=0;break;}}
//        if(ok)cout<<i<<' ';ans+=ok;}// int b1=a/N,b2=b/N,b3=c/N;// if((b1+b2)==b3){//     a=a%N;//     b=b%N;//     c=c%N;//     if(a+b==c) ans++;// }cout<<ans<<"\n";
}signed main(){ios::sync_with_stdio(false);cin.tie(nullptr),cout.tie(nullptr);int SAMPLES = 1;cin >> SAMPLES;for(int CUR=1;CUR<=SAMPLES;CUR++){SINGLE_TEST();}
}

1007.cats 的二分答案

题意:
给定 l , r , k l,r,k l,r,k,一个数组的左边界是 l l l,右边界n在 [ l , r ] [l,r] [l,r]之间。
[ l , r ] [l,r] [l,r]二分找右边界,假如mid在数组外就是越界。
问在越界不超过k次的情况下,有多少右边界可以被二分查找到。

题解:
就是dfs一下,每次递归 [ l , m i d − 1 ] [l,mid-1] [l,mid1], [ m i d + 1 , r ] [mid+1,r] [mid+1,r].
用map记录区间大小和越界次数,避免重复dfs,之间把已经记录的答案返回即可。
超过k次的就返回0.

代码:

#include <bits/stdc++.h>
#ifndef ONLINE_JUDGE
#include "_my_utils.h" 
#endif#define int long long
#define new _MY_NEW_
#define lg(ITEM) = static_cast<int>(std::log2(ITEM));using namespace std;
using ll = long long;
using PII = std::pair<int, int>;constexpr long long INF = 2E18 + 10;
constexpr int N = 2E6 + 10;void SINGLE_TEST() 
{int le,ri,k;cin>>le>>ri>>k;int L=1,R=ri-le+1;map<array<int,3>,int> ans;function<int(int,int,int)> dfs=[&](int l,int r,int cnt)->int{// if(l==r){//     return 1;// }if(l>r){return 0LL;}if(cnt>k || cnt>70){return 0LL;}if(ans.count({l,r,cnt})){return ans[{l,r,cnt}];}int mid=(l+r)/2;ans[{l,r,cnt}]=dfs(mid+1-mid,r-mid,cnt)+dfs(l,mid-1,cnt+1)+1;// ans[{l,r}]=dfs(l,mid-1,cnt)+dfs(l,mid-1,cnt+1)+1;return ans[{l,r,cnt}];};cout<<dfs(L,R,0)<<"\n";
}signed main(){ios::sync_with_stdio(false);cin.tie(nullptr),cout.tie(nullptr);int SAMPLES = 1;cin >> SAMPLES;for(int CUR=1;CUR<=SAMPLES;CUR++){SINGLE_TEST();}
}

1006.cats 的最小生成树

题意:
给定n个顶点,m条边的图。
每一次从这个图中删除一个最小生成树。知道图不连通。
边权按顺序给出。
问每条边是第几次删除的,假如最后没有删除就输出-1.

题解:
最多有 m n − 1 \frac{m}{n-1} n1m个最小生成树。
我们使用二维并查集来判断第几颗树的节点是否连通。

按顺序遍历每条边 ( u , v ) (u,v) (u,v),二分查找到最小而且没有连通的最小生成树,假如没有就是-1.
二分查找,假如两个节点在第mid颗树 ( u , v ) (u,v) (u,v)已经连通就 l = m i d + 1 l=mid+1 l=mid+1,否则 r = m i d r=mid r=mid.

代码:

#include <bits/stdc++.h>
//#define int long long
#define PII pair<int,int>
using namespace std;
const int N=3e5+6;
int ll[N],rr[N];
vector<int> p[N];
int ans[N],cnt[N];int find(int cn,int x)
{if(p[cn][x]==x){return x;}else return p[cn][x]=find(cn,p[cn][x]);
}void solve() 
{int n,m;cin >> n >>m;for(int i=1;i<=m;i++){cin>>ll[i]>>rr[i];if(ll[i]>rr[i])swap(ll[i],rr[i]);p[i].clear();ans[i]=0;}p[0].clear();int x=m/(n-1);for(int i=0;i<=x;i++){p[i].push_back(0);for(int j=1;j<=n;j++){p[i].push_back(j);}cnt[i]=0;}for(int i=1;i<=m;i++){int u=ll[i],v=rr[i];int l=-1,r=x,mid;while(r-l>1){mid=(l+r+1)/2;if(find(mid,u)==find(mid,v))l=mid;else r=mid;}if(r<x){int xx=find(r,u);int yy=find(r,v);p[r][yy]=xx;cnt[r]++;}ans[i]=r;}for(int i=1;i<=m;i++){if(ans[i]==x||cnt[ans[i]]!=n-1)cout<<"-1 ";else cout<<ans[i]+1<<' ';}cout<<'\n';
}signed main()
{ios::sync_with_stdio(false);cin.tie(nullptr),cout.tie(nullptr);int T=1; cin>>T;while(T--){solve();}
}

这篇关于2024杭电8的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1138554

相关文章

2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题

题库来源:安全生产模拟考试一点通公众号小程序 2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题是由安全生产模拟考试一点通提供,流动式起重机司机证模拟考试题库是根据流动式起重机司机最新版教材,流动式起重机司机大纲整理而成(含2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题参考答案和部分工种参考解析),掌握本资料和学校方法,考试容易。流动式起重机司机考试技

【专题】2024飞行汽车技术全景报告合集PDF分享(附原数据表)

原文链接: https://tecdat.cn/?p=37628 6月16日,小鹏汇天旅航者X2在北京大兴国际机场临空经济区完成首飞,这也是小鹏汇天的产品在京津冀地区进行的首次飞行。小鹏汇天方面还表示,公司准备量产,并计划今年四季度开启预售小鹏汇天分体式飞行汽车,探索分体式飞行汽车城际通勤。阅读原文,获取专题报告合集全文,解锁文末271份飞行汽车相关行业研究报告。 据悉,业内人士对飞行汽车行业

高效录音转文字:2024年四大工具精选!

在快节奏的工作生活中,能够快速将录音转换成文字是一项非常实用的能力。特别是在需要记录会议纪要、讲座内容或者是采访素材的时候,一款优秀的在线录音转文字工具能派上大用场。以下推荐几个好用的录音转文字工具! 365在线转文字 直达链接:https://www.pdf365.cn/ 365在线转文字是一款提供在线录音转文字服务的工具,它以其高效、便捷的特点受到用户的青睐。用户无需下载安装任何软件,只

2024网安周今日开幕,亚信安全亮相30城

2024年国家网络安全宣传周今天在广州拉开帷幕。今年网安周继续以“网络安全为人民,网络安全靠人民”为主题。2024年国家网络安全宣传周涵盖了1场开幕式、1场高峰论坛、5个重要活动、15场分论坛/座谈会/闭门会、6个主题日活动和网络安全“六进”活动。亚信安全出席2024年国家网络安全宣传周开幕式和主论坛,并将通过线下宣讲、创意科普、成果展示等多种形式,让广大民众看得懂、记得住安全知识,同时还

2024/9/8 c++ smart

1.通过自己编写的class来实现unique_ptr指针的功能 #include <iostream> using namespace std; template<class T> class unique_ptr { public:         //无参构造函数         unique_ptr();         //有参构造函数         unique_ptr(

论文翻译:arxiv-2024 Benchmark Data Contamination of Large Language Models: A Survey

Benchmark Data Contamination of Large Language Models: A Survey https://arxiv.org/abs/2406.04244 大规模语言模型的基准数据污染:一项综述 文章目录 大规模语言模型的基准数据污染:一项综述摘要1 引言 摘要 大规模语言模型(LLMs),如GPT-4、Claude-3和Gemini的快

免费也能高质量!2024年免费录屏软件深度对比评测

我公司因为客户覆盖面广的原因经常会开远程会议,有时候说的内容比较广需要引用多份的数据,我记录起来有一定难度,所以一般都用录屏工具来记录会议内容。这次我们来一起探索有什么免费录屏工具可以提高我们的工作效率吧。 1.福晰录屏大师 链接直达:https://www.foxitsoftware.cn/REC/  录屏软件录屏功能就是本职,这款录屏工具在录屏模式上提供了多种选项,可以选择屏幕录制、窗口

论文翻译:ICLR-2024 PROVING TEST SET CONTAMINATION IN BLACK BOX LANGUAGE MODELS

PROVING TEST SET CONTAMINATION IN BLACK BOX LANGUAGE MODELS https://openreview.net/forum?id=KS8mIvetg2 验证测试集污染在黑盒语言模型中 文章目录 验证测试集污染在黑盒语言模型中摘要1 引言 摘要 大型语言模型是在大量互联网数据上训练的,这引发了人们的担忧和猜测,即它们可能已

轻松录制每一刻:探索2024年免费高清录屏应用

你不会还在用一些社交工具来录屏吧?现在的市面上有不少免费录屏的软件了。别看如软件是免费的,它的功能比起社交工具的录屏功能来说全面的多。这次我就分享几款我用过的录屏工具。 1.福晰录屏大师 链接直达:https://www.foxitsoftware.cn/REC/  这个软件的操作方式非常简单,打开软件之后从界面设计就能看出来这个软件操作的便捷性。界面的设计简单明了基本一打眼你就会轻松驾驭啦

梳理2024年,螺丝钉们爱用的3款剪辑软件

这年头,视频到处都是,就跟天上的星星一样数不清。不管你是公司里的新面孔,还是职场上的老狐狸,学会怎么剪视频,就好比找到了赢的秘诀。不管是给上司汇报工作,展示你的产品,还是自己搞点小视频记录生活,只要是剪辑得漂亮,肯定能一下子吸引大家的目光,让人记得你。咱们今天就来侃侃现在超火的三款视频剪辑工具,尤其是PR剪辑,你肯定听说过,这货在剪辑界可是大名鼎鼎,用它剪视频,既专业又麻利。 NO1. 福昕轻松