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;
	    else
	      cout<<"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;
		else
		  cout<<"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;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MySQL 代理层:ProxySQL

文章目录 说明安装部署1.1 yum 安装1.2 启停管理1.3 查询版本1.4 Admin 管理接口 入门体验功能介绍3.1 多层次配置系统 读写分离将实例接入到代理服务定义主机组之间的复制关系配置路由规则事务读的配置延迟阈值和请求转发 ProxySQL 核心表mysql_usersmysql_serversmysql_repli…

【C++】相机标定源码笔记- 标定工具库测试

标定工具库测试 一、计算相机内参&#xff1a;对两个相机进行内参标定&#xff0c;并将标定结果保存到指定的文件中 采集图像&#xff1a;相机1-16张 相机2-17张 定义保存相机1/2内参的文件(.yml)路径。 定义相机1/2采集的图片文件夹路径。定义相机1/2存储文件名的向量获取文件…

作为图形渲染API,OpenGL和Direct3D的全方位对比。

当你在网页看到很多美轮美奂的图形效果&#xff0c;3D交互效果&#xff0c;你知道是如何实现的吗&#xff1f;当然是借助图形渲染API了&#xff0c;说起这个不就不得说两大阵营&#xff0c;OpenGL和Direct3D&#xff0c;贝格前端工场在本文对二者做个详细对比。 一、什么是图形…

26.5 Django模板层

1. 模版介绍 在Django中, 模板(Templates)主要用于动态地生成HTML页面. 当需要基于某些数据(如用户信息, 数据库查询结果等)来动态地渲染HTML页面时, 就会使用到模板.以下是模板在Django中使用的几个关键场景: * 1. 动态内容生成: 当需要根据数据库中的数据或其他动态数据来生…

推动能源绿色低碳发展,风机巡检进入国产超高清+AI时代

全球绿色低碳能源数字转型发展正在进入一个重要窗口期。风电作为一种清洁能源&#xff0c;在碳中和过程中扮演重要角色&#xff0c;但风电场运维却是一件十足的“苦差事”。 传统的风机叶片人工巡检方式主要依靠巡检人员利用高倍望远镜检查、高空绕行下降目测检查(蜘蛛人)、叶…

校园水质信息化监管系统——水质监管物联网系统

随着物联网技术的发展越来越成熟&#xff0c;它不断地与人们的日常生活和工作深入融合&#xff0c;推动着社会的进步。其中物联网系统集成在高校实践课程中可以应用到许多项目&#xff0c;如环境气象检测、花卉种植信息化监管、水质信息化监管、校园设施物联网信息化改造、停车…

Qt6 qcustomplot在图表上画一条直线

完整代码如下: 主要注意的是Qt中的QHBoxLayout等Qt类对象在被引用的情况下是可以使用局部变量的,典型的如setLayout这类型的函数接口,都可以使用局部变量,而不是new对象。 另外一点就是qcustomplot中的replot就相当于Qt中的update,由于qcustomplot是属于绘图类的接口库,…

如何用Python向PPT中批量插入图片

办公自动化办公中&#xff0c;Python最大的优势是可以批量操作&#xff0c;省去了用户粘贴、复制、插入等繁琐的操作。经常做PPT的朋友都知道&#xff0c;把图片插入到PPT当中的固定位置是一个非常繁琐的操作&#xff0c;往往调整图片时耗费大量的时间和精力。如何能省时省力插…

新型200V预稳压器可简化故障容受型电源的设计

讨论几种设计故障容受型电源的方法&#xff0c;其中包括新的预稳压器拓扑结构&#xff0c;该结构可简化电路设计及元件选择。 对抗相位故障 如果交流电源到电表之间出现错误连接故障&#xff0c;或是像空调或电磁炉等采用三相电源工作的大功率负载在两个相位之间的连接错误&a…

微信小程序 canvas 处理图片的缩放移动旋转问题

这里使用到了一个插件&#xff0c;canvas-drag&#xff0c;来实现大部分功能的 上效果 直接上代码吧~ wxml <div class"container"><canvas-drag id"canvas-drag" graph"{{graph}}" width"700" height"750" ena…

[漏洞分析] CVE-2024-6387 OpenSSH核弹核的并不是很弹

文章目录 漏洞简介漏洞原理补丁分析漏洞原理 漏洞利用漏洞利用1: SSH-2.0-OpenSSH_3.4p1 Debian 1:3.4p1-1.woody.3 (Debian 3.0r6, from 2005) [无ASLR无NX]漏洞利用原理漏洞利用关键点 漏洞利用2: SSH-2.0-OpenSSH_4.2p1 Debian-7ubuntu3 (Ubuntu 6.06.1, from 2006) [无ASLR…

[C++][设计模式][组合模式]详细讲解

目录 1.动机(Motivation)2.模式定义3.要点总结4.代码感受 1.动机(Motivation) 软件在某些情况下&#xff0c;客户代码过多地依赖于对象容器复杂的内部实现结构&#xff0c;对象容器内部实现结构(而非抽象结构)的变化引起客户代码的频繁变化&#xff0c;带来了代码的维护性、扩…

Hi3861 OpenHarmony嵌入式应用入门--wifi sta

鸿蒙WiFi STA模式相关的API接口文件路径 foundation/communication/interfaces/kits/wifi_lite/wifiservice/wifi_device.h 所使用的API接口有&#xff1a; API 接口说明 WifiErrorCode EnableWifi(void); 开启STA WifiErrorCode DisableWifi(void); 关闭STA int IsWif…

《后端程序猿 · 基于 Lettuce 实现缓存容错策略》

&#x1f4e2; 大家好&#xff0c;我是 【战神刘玉栋】&#xff0c;有10多年的研发经验&#xff0c;致力于前后端技术栈的知识沉淀和传播。 &#x1f497; &#x1f33b; 近期刚转战 CSDN&#xff0c;会严格把控文章质量&#xff0c;绝不滥竽充数&#xff0c;如需交流&#xff…

大数据期末复习——hadoop、hive等基础知识

一、题型分析 1、Hadoop环境搭建 2、hadoop的三大组件 HDFS&#xff1a;NameNode&#xff0c;DataNode&#xff0c;SecondaryNameNode YARN&#xff1a;ResourceManager&#xff0c;NodeManager &#xff08;Yarn的工作原理&#xff09; MapReduce&#xff1a;Map&#xff0…

点云处理实操 点云平面拟合

目录 一、什么是平拟合 二、拟合步骤 三、数学原理 1、平面拟合 2、PCA过程 四、代码 一、什么是平拟合 平面拟合是指在三维空间中找到一个平面,使其尽可能接近给定的点云。最小二乘法是一种常用的拟合方法,通过最小化误差平方和来找到最优的拟合平面。 二、拟合步骤…

Kafka 为何如此之快?深度解析其背后的秘密

目录 前言 一、生产者 1. 异步发送 2. 多分区并行 3. 消息批量发送 4.支持消息压缩 二、存储端 1. 分区和副本 2. 页缓存 3. 磁盘顺序写入 4. 零拷贝技术 5. 稀疏索引 三、消费端 1. 消费者群组 2. 批量拉取 3. 高效的偏移量管理 4. 并行消费 总结 前言 Kafk…

观测云赋能「阿里云飞天企业版」,打造全方位监控观测解决方案

近日&#xff0c;观测云成功通过了「阿里云飞天企业版」的生态集成认证测试&#xff0c;并荣获阿里云颁发的产品生态集成认证证书。作为监控观测领域的领军者&#xff0c;观测云一直专注于提供统一的数据视角&#xff0c;助力用户构建起全球范围内的端到端全链路可观测服务。此…

SwanLinkOS首批实现与HarmonyOS NEXT互联互通,软通动力子公司鸿湖万联助力鸿蒙生态统一互联

在刚刚落下帷幕的华为开发者大会2024上&#xff0c;伴随全场景智能操作系统HarmonyOS Next的盛大发布&#xff0c;作为基于OpenHarmony的同根同源系统生态&#xff0c;软通动力子公司鸿湖万联全域智能操作系统SwanLinkOS首批实现与HarmonyOS NEXT互联互通&#xff0c;率先攻克基…

Appium adb 获取appActivity

方法一&#xff08;最简单有效的方法&#xff09; 通过cmd命令&#xff0c;前提是先打开手机中你要获取包名的APP adb devices -l 获取连接设备详细信息 adb shell dumpsys activity | grep mFocusedActivity 有时获取到的不是真实的Activity 方法二 adb shell monkey -p …