首页 > 其他分享 >noip模拟19

noip模拟19

时间:2024-11-23 17:56:02浏览次数:6  
标签:return cout noip 19 int ans now 模拟 mod

A 镜的绮想 (mirror)

签签签。

配对的点对一定 \(x\) 相同,那用 \(O(nm)\) 地匹配一下,因为有几个点的 \(x\) 全都相同,所以 \(map\) 和 \(umap\) 会塞到 \(n\times m\) 个数,显然会爆炸,只能开桶,手动把纵坐标搞成全正的,就行。

点击查看代码
#include<bits/stdc++.h>
using namespace std;
int n,m;
const int N=5e3+3,M=4e6+6;
struct node{
	int x,y;
	int now;
}a[N],c[N];
int b[N<<1];
int cnt;
int mp[M];
int add=1e6;
signed main()
{
	freopen("mirror.in","r",stdin);
	freopen("mirror.out","w",stdout);
	ios::sync_with_stdio(false);
	cin.tie(0),cout.tie(0); 
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i].x>>a[i].y;
		a[i].y+=add;
	}
	for(int i=1;i<=m;i++)
	{
		cin>>c[i].x>>c[i].y;
		c[i].y+=add;
	}
	int ans=0;
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			if(a[i].x==c[j].x)
			{
				mp[(a[i].y+c[j].y)]++;
				ans=max(ans,mp[(a[i].y+c[j].y)]);
			}
		}
	}
	cout<<ans;
}

B 万物有灵 (animism)

贪心的考虑,从最底层往上走一定是最大的,然后发现,每一个 \(k\) 层的节点数之和是上一层的 \(\prod a_i\) 倍,因为 \(k\) 是奇数的情况会每层选的不同,于是可以果断把 \(k\) 乘 \(2\),就是偶数了。

然后发现每一个整段是等比数列,用 \(\log\) 复杂度的求和方式算就行了,因为模数有可能是合数,不能算逆元。

点击查看代码
#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,k,mod;
const int N=1e6+5;
int a[N],sum[N],ans;
int ppow(int a,int b)
{
	int res=1;
	while(b)
	{
		if(b&1) res=(res*a)%mod;
		a=(a*a)%mod,b>>=1;
	}return res;
}
int f(int now,int d)
{
	if(d==1) return now;
	if(d==0) return 1;
	if(d%2==0) return (f(now,d/2)*(1+ppow(now,d/2))%mod)%mod;
	else return (ppow(now,d)+(((1+ppow(now,(d-1)/2))%mod)%mod*f(now,(d-1)/2)%mod)%mod)%mod;
}
signed main()
{
	freopen("animism.in","r",stdin);
	freopen("animism.out","w",stdout); 
	ios::sync_with_stdio(false);
	cin.tie(0),cout.tie(0);
	cin>>n>>k>>mod;
	for(int i=0;i<k;i++) cin>>a[i];
	if(n<N)
	{
		sum[0]=1;
		for(int i=0;i<n;i++) sum[i+1]=sum[i]*a[i%k]%mod;
		for(int i=n;i>=0;i-=2) ans=(ans+sum[i])%mod;
		return cout<<ans,0;
	}
	sum[0]=1;
	for(int i=1;i<=k*2;i++) sum[i]=(sum[i-1]*a[(i-1)%k])%mod;
	if(n<=k*2)
	{
		for(int i=n;i>=0;i-=2) ans=(ans+sum[i])%mod;
		return cout<<ans,0;
	}
	int rd=n/(k*2);
	int S=sum[k*2];
	if(n%2==1)
	{
		int res=0;
		for(int i=1;i<=k*2;i+=2) res=(res+sum[i])%mod;
		int ret=f(S,rd-1)%mod;ret++;
		ans=(ans+res*ret%mod)%mod;
		int pp=ppow(S,rd);
		for(int i=n%(k*2);i>=1;i-=2) ans=(ans+sum[i]*pp%mod)%mod;
		ans=(ans%mod+mod)%mod;
		cout<<ans;
	}
	else
	{
		int res=0;
		for(int i=2;i<=k*2;i+=2) res=(res+sum[i])%mod;
		int ret=f(S,rd-1)%mod;ret++;
		ans=(ans+res*ret%mod)%mod;
		int pp=ppow(S,rd);
		for(int i=n%(k*2);i>=1;i-=2) ans=(ans+sum[i]*pp%mod)%mod;
		++ans;
		ans=(ans%mod+mod)%mod;
		cout<<ans;
	}
}

C 白石溪 (creek)

\(n^2\) 的 dp 是简单的。设 dp_{i,j}$ 表示考虑到 \(i\) 位置,前面有 \(j\) 个红色(或蓝色),转移容易。

D 上山岗 (uphill)

标签:return,cout,noip,19,int,ans,now,模拟,mod
From: https://www.cnblogs.com/ccjjxx/p/18564883

相关文章

  • NOIp 考前适应题
    ACF1494EA-ZGraph题意给一个有向图,边权是字母,有三种操作:添加边\((u,v,c)\);删除边\((u,v)\);询问是否存在一个长度为\(k\)的非简单路径满足\(v_1\leftarrowv_k\)的路径与\(v_k\leftarrowv_1\)的路径边权序列相同。分析手玩题。顶点数量为偶数的情况容易发现......
  • 信息学奥赛一本通 1329:【例8.2】细胞(同东方博宜OJ 1907. 有多少细胞)
    【题目描述】一矩形阵列由数字0到9组成,数字1到9代表细胞,细胞的定义为沿细胞数字上下左右还是细胞数字则为同一细胞,求给定矩形阵列的细胞个数。如:阵列4100234500067103456050020456006710000000089有4个细胞。【输入】第一行为矩阵的行n和列m;下面为一个n×m的......
  • 第十六届蓝桥杯模拟赛(第二期)—Java
    2024第十六届蓝桥杯模拟赛/校赛第二期个人题解,有错误的地方欢迎各位大佬指正问题一(填空题)【问题描述】如果一个数p是个质数,同时又是整数a的约数,则p称为a的一个质因数。请问,2024的最大的质因数是多少?【答案提交】这是一道结果填空的题,你只需要算出结果后......
  • 题解:CF1970E1 Trails (Easy)
    基本思路设\(dp_{i,j}\)为第\(i\)天时在第\(j\)个小屋的方案数,\(r_j\)为第\(j\)个小屋共有多少条路连接(即\(s_j+l_j\))。易得转移方程为\[dp_{i,j}=\sum_{k=1}^{m}dp_{i-1,k}\cdot(r_j\cdotr_k-l_j\cdotl_k)\](因为至少走一条短路,所以减去全长路的情况)代码实现......
  • CF1974D Ingenuity-2
    基本思路贪就完了。首先要明确的是,在任何时刻都须保证机器人之间的距离最近。因此,当某一时刻一个机器人的横坐标(或纵坐标)小于另一个机器人时,需要增加横坐标(或纵坐标);横坐标(或纵坐标)大于另一个机器人时,需要减少横坐标(或纵坐标)。另外,题目中给到“都分配给两个机器人”这一条件,因......
  • 思科模拟器1.2(划分逻辑局域网)
    对于一个通过交换机(或集线器)连接起来的通信终端,可以利用子网掩码划分出不同网段,从而建立起一个逻辑局域网,实现对终端之间的通信控制。操作要求:图1.2.1  按图1.2.1所示的拓扑图的设备及表1.2.1的要求在思科模拟器软件中布置并连接好设备。设置适当的子网掩码使得一个网段......
  • JSP程序设计1959信息安全风险评估系统(源码)
    项目包含:源码、讲解视频、说明文档,部署录像请查看博主个人简介运行环境:推荐jdk1.8开发工具:Eclipse、MyEclipe以及idea(推荐)操作系统:windows108G内存以上(其他windows)浏览器:GoogleChrome(推荐)、Edge、360浏览器;数据库:MySQL5.7;数据库可视化工具:NavicatPremium推荐......
  • 打卡信奥刷题(290)用C++工具信奥P2347[普及组/提高] [NOIP1996 提高组] 砝码称重
    [NOIP1996提高组]砝码称重题目描述设有1g1\mathrm{g}1g、2g......
  • [2024.11.23]NOIP2024模拟赛
    又废了。没开T3,所以赛后需要重新写。赛时T1第一眼捕捉到字典序,同时还注意到了哈密顿路径。数据范围很小,所以考虑枚举填充次序,每次找到最优的填充。把以前已经填过的元素标记。对于当前的这次填充,它能填在这里需要满足后面最优的填充方式与之前填充代价的和需要满足条件。......
  • 【核心复现】模拟负荷不确定性——拉丁超立方抽样生成及缩减场景研究(Matlab全代码)
     ......