20240628模拟赛总结

cf好了 让我们开始

T1 Two Regular Polygons

判断能不能构造出题中要求的正多边形

关键是n%m==0

 

Two Regular Polygons

#include<bits/stdc++.h>
using namespace std;
int t;
int n,m;
int main()
{cin>>t;for(int i=1;i<=t;i++){cin>>n>>m;if(n%m==0)cout<<"YES"<<endl;elsecout<<"NO"<<endl;}   return 0;
}

T2 Bogsort

就是要求:

关键是要排序后再反转,目的是确保答案的唯一性,就是昨天构造的知识点,但是比昨天简单多了qwq

Bogosort

 #include<bits/stdc++.h>
using namespace std;
int arr[105];
bool cmp(const int &a,const int &b)
{return a>b;
}
int main()
{int t;scanf("%d",&t);while(t--){int n;scanf("%d",&n);for(int i=0;i<n;i++)	scanf("%d",&arr[i]);sort(arr,arr+n,cmp);for(int i=0;i<n;i++){if(i<n-1)	printf("%d ",arr[i]);else	printf("%d\n",arr[i]);}}return 0;
}

 T3 Adding Powers

对于在第i次操作,可以选择不做也可以选择将pos的位置的数减去k的i次方,问能否变成0.

典型的进制转换,也就是把每个数进行分解,记分解完的第i是x_i,按题所讲就是不能大于1,然后使用记录下k进制下第i位的和,然后判断是否有大于1的

Adding Powers

 #include<bits/stdc++.h>
using namespace std;
long long a[35];
int trans[35][105],cnt[35];
int n,k;
void divide(int i,long long x,int m)
{if(x==0)return;trans[i][++cnt[i]]=x%m;divide(i,x/m,m);return;
}
bool judge()
{for(int i=1;i<=n;i++)for(int j=1;j<=cnt[i];j++)if(trans[i][j]==1)for(int k=1;k<=n;k++)if(k!=i&&trans[k][j]==1)return false;return true;
}
int main()
{int t;cin>>t;while(t--){memset(trans, 0, sizeof(trans));cin>>n>>k;for(int i=1;i<=n;i++){cin>>a[i];cnt[i]=0;divide(i,a[i],k);}bool flag=true;for(int i=1;i<=n;i++){for(int j=1;j<=cnt[i];j++)if(trans[i][j]>1){flag=false;break;}}if(!flag){cout<<"NO"<<endl;continue;}flag=judge();if(!flag)cout<<"NO"<<endl;elsecout<<"YES"<<endl; }return 0;
}

T4 Count the Arrays

组合数学

蛮喜欢的一集

关键公式是C(m,n-1)*(n-2)%mod*q_pow(2,n-3)%mod

对,要开快速幂

要不然会被卡

然后数据范围也挺大的,要用longlong

Count the Arrays

 #include<bits/stdc++.h>
using namespace std;
typedef long long LL;       
const int inf=0x3f3f3f3f;
const int N=110;
const int mod=998244353;
LL q_pow(LL a,LL b)
{if(b<0)return 0;LL ans=1;while(b){if(b&1)ans=ans*a%mod;a=a*a%mod;b>>=1;}return ans;
}
LL C(int n,int m)
{LL ans1=1;LL ans2=1; for(int i=0;i<m;i++){ans1=ans1*(n-i)%mod;ans2=ans2*(i+1)%mod;}ans2=q_pow(ans2,mod-2);return ans1*ans2%mod;
}
int main()
{int n,m;scanf("%d%d",&n,&m);printf("%lld\n",C(m,n-1)*(n-2)%mod*q_pow(2,n-3)%mod);return 0;
}

T5 Array Shrinking

区间DP

还以为是树上DP

唐唐Merlin

但是确实是在DAG上的dp

这点很晚才想到

耽误时间了

就是进行dfs

我们设ans[i][j]是区间上最少会被合并成多少个点,若数据成立,那么ans[i][j]=1,所以方程就是:

ans[i][j]=min{ans[i][k]+ans[k+1][j],k∈[l,r-1]}

但是我没有想到一种特殊情况,所以挂了

后来听讲评时才明白

就是:

ans[i][k]=ans[k+1][j]=1并且f[i][k]=f[k+1][j]就可以合并区间了,也就是ans[i][j]=1,f[i][j]=f[i][k]+1

Array Shrinking

 #include<bits/stdc++.h>
using namespace std;
int val[600][600];
int dp[600][600];
int main()
{int n;cin>>n;for(int i=1;i<=n;i++){cin>>val[i][i];}for(int i=1;i<=n;i++){for(int j=i;j<=n;j++){dp[i][j]=j-i+1;}}for(int len=1;len<=n-1;len++){for(int i=1;i<=n-len;i++){int j=i+len;for(int k=i;k<=j-1;k++){dp[i][j]=min(dp[i][j],dp[i][k]+dp[k+1][j]);if((dp[i][k]==1&&dp[k+1][j]==1)&&val[i][k]==val[k+1][j]){dp[i][j]=1;val[i][j]=val[i][k]+1;}}}}cout<<dp[1][n]<<endl;return 0;
}

T6 Attack on the Red Kingdom

博弈论SG函数

来HL之前练少了

不是很熟练~

但是讲评听懂了

不能连续使用的限制固定在每个数自身上,所以可以进行单独游戏SG计算再异或。

考虑单个游戏的SG计算。

对于状态数特别大的SG计算,有两种想法:打表找规律,找循环节。这里显然是后者。因为变化不多,只有3种,所以SG值∈[0,4]。并且每次i→[i−5,i−1]。

单个状态无非是SG[i][j]表示值为i上次攻击为j。然后将SG[i−4,i][0,2]这15个状态塞进map,找到循环节。

最后,对每个数尝试每种攻击之后的状态,判断是不是0(对对面必输态)。

但是我好想想出来了一种新的乱搞,实现了一个博弈论中的状态压缩算法,通过预处理状态数组和权重数组,计算游戏局面的必胜策略数。具体的游戏规则和输入输出格式可能需要根据具体的题目描述来理解。

是吗?

Attack on Red Kingdom

 #include<bits/stdc++.h>
using namespace std;
#define rep(i,a,n) for(int i=a;i<n;i++)
#define per(i,a,n) for(int i=n-1;i>=a;i--)
typedef vector<int> VI;
typedef long long ll;
typedef pair<int,int> PII;
typedef double db;
const ll mod=1000000007;
ll powmod(ll a,ll b) 
{ll res=1;a%=mod; assert(b>=0); for(;b;b>>=1){if(b&1)res=res*a%mod;a=a*a%mod;}return res;}
ll gcd(ll a,ll b) 
{ return b?gcd(b,a%b):a;
} 
const int N=301000;
int i,n,p[10],wt[1100],pp;
int dp[1100][10];
ll a[N];
void solve() 
{for(int i=1;i<=500;i++) {int z=0;for(int j=0;j<3;j++){set<int> sg;rep(k,0,3) if(j==0||k==0||j!=k){if(i-p[k]>=0) sg.insert(dp[i-p[k]][k]);else sg.insert(0);}dp[i][j]=0;while(sg.count(dp[i][j])) dp[i][j]+=1;z=z*4+dp[i][j];}wt[i]=z;}for(int prd=1;prd<=30;prd++) {bool sm=1;for(int j=50;j<500;j++) if(j+prd<=500&&wt[j]!=wt[j+prd]) sm=0;if(sm) {pp=prd;return;}}assert(0);
} 
int getsg(ll n,int way) 
{int st=0;if(n<=0) return 0;if(n>500) {n-=(n-500)/pp*pp;while(n>500) n-=pp;}return dp[n][way];
}
int main() 
{for(scanf("%d",&i);i;i--) {scanf("%d",&n);rep(i,0,3) scanf("%d",p+i);solve();int s=0;rep(i,0,n) {scanf("%lld",a+i);s^=getsg(a[i],0);}int ans=0;rep(i,0,n) rep(j,0,3) if((s^getsg(a[i],0)^getsg(a[i]-p[j],j))==0) ans+=1;printf("%d\n",ans);}return 0;
}

T7 Autocompletion

大概是字典树上跑dp,然后用前缀和维护?

确实如此

但是就要回寝了

所以是照着题解写的

Autocompletion

 #include<bits/stdc++.h>
using namespace std;
int n,m,check1,q[1001000];
struct dict1
{int ch[26],f;bool fin;
}t[1001000];
stack<pair<int,int> >s;
void gs(int x)
{if(s.empty()||t[x].f-check1<s.top().second)s.push(make_pair(x,t[x].f-check1));check1+=t[x].fin;for(int i=0;i<26;i++){if(!t[x].ch[i])continue;t[t[x].ch[i]].f=t[x].f+1;if(!s.empty()&&t[t[x].ch[i]].fin)t[t[x].ch[i]].f=min(t[t[x].ch[i]].f,s.top().second+check1+1);gs(t[x].ch[i]);}if(!s.empty()&&s.top().first==x)s.pop();
}
char str[2];
int main()
{scanf("%d",&n);for(int i=1,x;i<=n;i++)scanf("%d%s",&x,str),t[x].ch[str[0]-'a']=i;scanf("%d",&m);for(int i=1,x;i<=m;i++)scanf("%d",&q[i]),t[q[i]].fin=true;gs(0);for(int i=1;i<=m;i++)printf("%d ",t[q[i]].f);return 0;
}

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

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

相关文章

MySQL——事务ACID原则、脏读、不可重复读、幻读

什么是事务 要么都成功&#xff0c;要么都失败 一一一一一一一 1. SQL执行&#xff1a;A给B转账 A 1000 ---->200 B 200 2. SQL执行&#xff1a;B收到A的钱 A 800 B 400 一一一一一一一 将一组SQL放在一个批次中去执行~ 事务原则&#xff1a;ACI…

学习笔记(linux高级编程)10

IPC 进程间通信 interprocess communicate 三大类&#xff1a; 1、古老的通信方式 无名管道 有名管道 信号 2、IPC对象通信 system v BSD suse fedora kernel.org 消息队列(用的相对少&#xff0c;这里不讨论) 共享内存 信号量集 3、socket通信 网络通信 特…

TF/IDF算法

第1关&#xff1a;去除停用词 任务描述 本关任务&#xff1a;根据本关所学有关停用词的知识&#xff0c;编写使用停用词表去除停用词的程序并通过测试用例。 相关知识 为了完成本关任务&#xff0c;你需要掌握&#xff1a; 停用词的意义&#xff1b; 去除停用词的步骤。 …

浅谈Web性能测试(原创)

一、性能测试不是什么高技术的活&#xff1a; 说到性能测试&#xff0c;很多工作时间较短的新同事或者应届生就很害怕。 为什么害怕&#xff0c;因为感觉无从下手&#xff0c;不知道该做什么、怎么做、做到什么程度&#xff1f; 一听性能测试首先想到的是各种专业的性能测试…

ThingsKit物联网平台功能解析

随着物联网技术的飞速发展&#xff0c;各种物联网平台应运而生&#xff0c;为设备管理和数据集成提供了强大的支持。ThingsKit物联网平台以其全面的功能和灵活的配置&#xff0c;成为行业中的一大亮点。本文将详细解析ThingsKit物联网平台的功能清单&#xff0c;带您深入了解该…

oracle数据库默认表空间详解

文章目录 oracle数据库默认表空间列表 oracle数据库默认表空间列表 系统表空间&#xff08;System Tablespace&#xff09; 系统表空间包含了系统级别的元数据&#xff0c;如数据字典、系统表和存储过程等。例如SYSTEM表空间用于保存数据库的数据字典、PL/SQL程序的源代码和解释…

【C语言】分支(选择)和循环语句

目录 简述选择语句简述if语句单if结构语法格式 if-else结构语法结构 语法结构 循环结构break和continuewhile循环语法结构 for循环语法结构 do while循环语法结构 简述 在c语言中分支和循环语句是极其重要的&#xff0c;就像生活中你难免要做一些判断和循环往复做一些事。 选…

SpringBoot 中的参数校验:构建健壮应用的基石

前言 在开发Web应用时&#xff0c;处理用户输入是不可避免的一环。然而&#xff0c;用户输入往往充满不确定性&#xff0c;可能是格式不正确、类型不匹配&#xff0c;甚至包含恶意内容。为了确保应用的稳定性和安全性&#xff0c;对输入参数进行有效校验显得尤为重要。Spring …

【触想智能】工业平板电脑在新能源领域上的应用分析

工业平板电脑是一种具有高性能和稳定性的计算机设备&#xff0c;适用于在恶劣环境下进行数据采集、运营管理和现场操作。 随着新能源技术的快速发展&#xff0c;工业平板电脑不断地得到应用&#xff0c;并且已成为新能源领域中的重要工具之一。本文将从四个方面探讨工业平板电脑…

WSO2 products 文件上传漏洞(CVE-2022-29464)

前言 CVE-2022-29464 是一个影响多个 WSO2 产品的严重远程代码执行&#xff08;RCE&#xff09;漏洞。这些产品包括 WSO2 API Manager、WSO2 Identity Server 和 WSO2 Enterprise Integrator 等。由于用户输入验证不当&#xff0c;该漏洞允许未经身份验证的攻击者在服务器上上…

代码随想录算法训练营第九天|151.翻转字符串里的单词、右旋字符串、28. 实现 strStr()、459.重复的子字符串

打卡Day9 1.151.翻转字符串里的单词2.右旋字符串3.28. 实现 strStr()4.459.重复的子字符串 1.151.翻转字符串里的单词 题目链接&#xff1a;翻转字符串里的单词 文档讲解&#xff1a; 代码随想录 思路&#xff1a;首先&#xff0c;移除多余的空格&#xff1b;然后&#xff0c…

TensorRT学习(二)TensorRT使用教程(Python版)

本文适合快速了解TensorRT使用的整体流程,具体细节还是建议参考TensorRT的官方文档。 加速原理: 加速原理比较复杂,它将会根据显卡来优化算子,以起到加速作用(如下图所示)。简单的来说,就是类似于你出一个公式1+1+1,而你的显卡支持乘法,直接给你把这个公式优化成了1*…

生成式AI赋能金融信贷:减少信用评分偏差

信用评分在确定谁获得信贷以及以何种条件获得信贷方面发挥着关键作用。然而&#xff0c;尽管这一点很重要&#xff0c;但传统的信用评分系统长期以来一直受到一系列关键问题的困扰——从偏见和歧视&#xff0c;到有限的数据考虑和可扩展性挑战。例如&#xff0c;一项针对美国贷…

【代码随想录】【算法训练营】【第56天】 [卡码98]所有可达路径

前言 思路及算法思维&#xff0c;指路 代码随想录。 题目来自 卡码网。 day 56&#xff0c;周二&#xff0c;继续ding~ 题目详情 [卡码98] 所有可达路径 题目描述 卡码98 所有可达路径 解题思路 前提&#xff1a; 思路&#xff1a; 重点&#xff1a; 代码实现 C语言…

【JPCS出版,PSESG 2024,8月16-18】2024年电力系统工程与智能电网国际学术会议

2024年电力系统工程与智能电网国际学术会议(PSESG 2024)于2024年8月16-18日在中国北京隆重召开。 会议旨在为从事“电力系统工程”、“智能电网”、“储能技术”等领域的专家学者、工程技术人员、研发人员提供一个共享科研成果和前沿技术&#xff0c;了解学术发展趋势&#xf…

GPT-5即将登场:AI赋能下的未来工作与日常生活新图景

随着OpenAI首席技术官米拉穆拉蒂在近期采访中的明确表态&#xff0c;GPT-5的发布已不再是遥不可及的梦想&#xff0c;而是即将在一年半后与我们见面的现实。这一消息无疑在科技界乃至全社会引发了广泛关注和热烈讨论。从GPT-4到GPT-5的飞跃&#xff0c;被形容为从高中生到博士生…

SpringBoot之内容协商

现象演示 假设有一个需求是根据终端的不同&#xff0c;返回不同形式的数据&#xff0c;比如 PC 端需要以 HTML 格式返回数据&#xff0c;APP、小程序端需要以 JSON 格式返回数据。这时我们是 coding 几个相似的接口&#xff1f;还是在一个接口里面做复杂判断处理&#xff1f;两…

SQL执行慢排查以及优化思路

数据库服务器的优化步骤 当我们遇到数据库调优问题的时候&#xff0c;该如何思考呢&#xff1f;我把思考的流程整理成了下面这张图。 整个流程划分成了观察&#xff08;Show status&#xff09;和行动&#xff08;Action&#xff09;两个部分。字母 S 的部分代表观察&#xf…

LSH算法:高效相似性搜索的原理与Python实现I

局部敏感哈希&#xff08;LSH&#xff09;技术是快速近似最近邻&#xff08;ANN&#xff09;搜索中的一个关键方法&#xff0c;广泛应用于实现高效且准确的相似性搜索。这项技术对于许多全球知名的大型科技公司来说是不可或缺的&#xff0c;包括谷歌、Netflix、亚马逊、Spotify…