首页 > 其他分享 >2022ICPC网络赛第二场 - A

2022ICPC网络赛第二场 - A

时间:2022-09-26 23:22:22浏览次数:87  
标签:第二场 10 int 网络 st 2022ICPC ans +...+ getchar

构造 + 费马小定理

2022ICPC网络赛(II)A

[题目详情 - A Yet Another Remainder (pintia.cn)](https://codeforces.com/contest/1734/problem/E)

题意

有一个大整数 \(x(1<=x<=10^{10^6})\), 给出 \(x\) 的十进制位数为 \(n(1<=n<=10^6)\), 设从高到低位的数为 \(a[i](1<=i<=n)\), 并给出 \(min(n,100)\) 行信息 \(b_{i,j}\),第 \(i\) 行有 \(i\) 个数,

\(b_{i,j}\) 表示 for (int k = j; k <= n; k += i) b[i][j] += a[i];

有 \(q(1<=q<=10)\) 组询问,每组给出一个素数 \(p\;(p=3\;or\;7<=p<=97)\), 求 \(x\mod p\) 的结果

思路

  1. 首先关于同余的题目,最好下标从 0 开始,因此先把题干下标由低位到高位是 \([n,1]\) 改成从低位到高位分别是 \([0,n-1]\), 把 \(b_{i,j}\) 预处理一下

  2. 再思考 \(b_{i,j}\) 是什么含义,\(b_{i,j}\) 其实是 \(a\) 数组的下标,在模 \(i\) 意义下,同余于 \(j\) 的所有数之和

  3. 肯定不会是让把 \(a[i]\) 全部求出来,很可能是要通过 \(b_{i,j}\) 把 \(x\) 拼出来

  4. 由于答案并非求 \(x\), 而是求 \(x \mod p\) 的值,就转化为找一个较好拼凑出的 \(y\), 满足 \(y\equiv x\pmod p\)

  5. \(x=1*a_0+10*a_1+100*a_2+...+10^i*a_i+...+10^n*a_n\)

通过暴力验证可以发现,对于任何一个素数 \(p\;(p=3\;or\;7<=p<=97)\),都能在 100 以内找到一个 \(i\), 使得 \(10^i\equiv 1\pmod p\)

(这里其实用费马小定理就可以,\(i=p-1\))

​ 因此 \(x\equiv (a_0+10*a_1+...+10^{i-1}a_{i-1})+(a_i+10*a_{i+1}+...+10^{i-1}*a_{2*i-1})+...+\)

​ 用 b矩阵的第 \(i\) 行乘相应的系数就可拼凑出上式

  1. n 较小时可能不存在第 \(i(即p-1)\) 行, 要暴力特判

代码

#include<bits/stdc++.h>
using namespace std;
#define pb push_back
#define ALL(x) x.begin(),x.end()
#define SZ(x) x.size()
typedef long long ll;

inline ll _read() {
	static ll ans;
	static unsigned int c;
	static bool p;
	for (c = getchar(); c != '-' && (c < '0' || c > '9'); c = getchar());
	if (c == '-') p = false, c = getchar(); else p = true;
	for (ans = 0; c <= '9' && c >= '0'; c = getchar()) ans = ans * 10 + c - '0';
	return p ? ans : -ans;
}

const int N = 110;
int pr[N], cnt;
bool st[N];

void get_primes(int n)
{
	memset(st, true, sizeof st);
	st[1] = false;
	for (int i = 2; i <= n; i++)
	{
		if (st[i])
			pr[++cnt] = i;
		for (int j = 1; j <= cnt && pr[j] <= n / i; j++)
		{
			int p = pr[j];
			st[i * p] = false;
			if (i % p == 0)
				break;
		}
	}
}
ll qmi(ll a, ll b, ll p)
{
	ll ans = 1;
	while(b)
	{
		if (b & 1)
			ans = ans * a % p;
		a = a * a % p;
		b >>= 1;
	}
	return ans % p;
}
int id[N];
void presolve()
{
	for (int j = 1; j <= cnt; j++)
	{
		int p = pr[j];
		for (int i = 1; i <= 99; i++)
		{
			if (qmi(10, i, p) == 1)
			{
				id[p] = i;
				break;
			}
		}
	}
}

ll b[N][N];
int n, q;
int p;

ll solve()
{
	p = _read();
	int len = id[p];
	ll ans = 0;
	for (int i = 0; i < len; i++)
	{
		ans += b[len][i] * qmi(10, i, p) % p;
		if (ans >= p)
			ans -= p;
	}
	return ans;
}

void solve2()
{
	for (int i = 1; i <= n; i++)
	{
		for (int j = 0; j < i; j++)
			b[i][j] = _read();
	}
	q = _read();
	while(q--)
	{
		p = _read();
		ll ans = 0;
		for (int i = 0; i < n; i++)
		{
			ans += qmi(10, n - i - 1, p) * b[n][i] % p;
			if (ans >= p)
				ans -= p;
		}
		printf("%lld\n", ans);
	}
}
int main() {
	get_primes(99);
	presolve();
	int T = _read();
	while(T--)
	{
		n = _read();
		if (n <= 100)
		{
			solve2();
			continue;
		}
		for (int i = 1; i <= 100; i++)
		{
			for (int j = 0; j < i; j++)
			{
				int jj = j + 1;
				int r = (n - jj) / i * i + jj - 1;
				r = n - 1 - r;
				b[i][r] = _read();
			}
		}
		q = _read();
		while(q--)
		{
			ll ans = solve();
			printf("%lld\n", ans);
		}
	}
	return 0;
}

标签:第二场,10,int,网络,st,2022ICPC,ans,+...+,getchar
From: https://www.cnblogs.com/hzy717zsy/p/16732954.html

相关文章

  • 【Python】网络爬虫
    本章主要讲的是基于Python语言的数据采集,该功能要讲起来可以单独作为一门课程来学习,因为这是一门很重要的课程,一般运用在大数据处理和人工智能上,该应用提供大量的数据。1.......
  • centos 配置网络
    虚拟网络编辑器设置Vmware为vmware8网卡nat模式虚拟机网卡为NAT模式切换到网卡配置cd/etc/sysconfig/network-scripts/备份一份cpifcfg-ens33./ifcfg-ens33......
  • 2022icpc网络赛 A题B题
    AYetAnotherRemainder费马小定理\(10^{p-1}\%p==1\)考虑第\(p-1\)行字符串为\(a_1a_2a_3a_4a_5a_6\)假设当前模数p为3那考虑第2行然后第一个数是\(a_1+a_3+a_......
  • 企业信息化-3.5 IT资源管理1-硬件及网络
    笔者从业的主要是AppDev&Ops,对IT设备型管理经验不是很足,以下是本人总结了以前跟Host&ServerServiceGroup及EnterpriseCloudServiceGroup的几位高工、经理、架构师......
  • 网络流入门学习笔记
    基本概念网络流,即网络+流网络就是由许多结点和边组成的图,在这里边权表示允许通过的最大流量在网络中,有两个特殊的结点,一个叫源点,一个叫汇点网络流中最大流问题可以看成......
  • 计算机网络物理层
    1、数据通信系统   数据通信涉及三个部分:发送,传输,接收。  DTE:dataterminalequipment,指的是计算机和终端设备(发送和接收数据的设备)DCE:datacommunications......
  • ICPC2022 网络赛2 L
    L给一个长度为\(n\)的字符串\(s\),它只包含I,C,P三种字符。有\(q\)个询问,每次问\(s[l:r]\)子串中有多少个子序列是ICPC。\(n,q\leq2\times10^6\)题解硬算。固定I,P的......
  • 网络安全笔记(Nineteen Days)
    NineteenDays虚拟局域网VLAN一、虚拟局域网VLAN1、目的划分广播域,不用广播域是不能够进行通信的,如果想要进行通信,这时候需要借助路由增强网络的安全性简化了......
  • IVI车载信息娱乐系统的网络安全注意事项
    当今新车购买者的重点更多地集中在“智能座舱生态系统体验”上,而不是动力和油耗等传统功能。汽车行业已将全连接车载信息娱乐(IVI)系统所提供的触摸屏显示器、语音命令和......
  • 卷积神经网络
    1.神经网络    对于一个分类任务,用机器学习方法可以做,具体步骤是首先要明确特征和标签,把这个特征标签数据放到机器学习算法里训练,然后保存模型,预测分类准确性。......