首页 > 其他分享 >12

12

时间:2023-12-04 21:56:02浏览次数:34  
标签:同理 12 int ll long 序列 我们

\(X=1\)

首先构造题目一般都很难想到,所以我们先打上一个暴力,把序列以及模数输出

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=1000;
int a[N];
int main()
{
	for(int i=1;i<=9;i++)
	{
		for(int j=1;j<=i;j++)
		a[j]=j;
		do{
			if(!check(i)) continue;
			printf("OK:");
			for(int j=1;j<=i;j++)
			printf("%d ",a[j]);
			int sum=0;
			puts("");
			for(int j=1;j<=i;j++)
			{
				sum+=a[j];
				sum%=i;
				printf("%d ",sum);
			}
			puts("");
			puts("");
		}while(next_permutation(a+1,a+i+1));
	}
    return 0;
}

输出之后可以很明显的发现两点:奇数(除了1)不可能,合法序列第一个数一定是\(n\)

上面的发现提示我们分奇偶讨论,对于模意义下的加法,任何一个加数加减\(n\)的倍数,最终结果都不变,所以我们尝试把偶数位的数字减去\(n\)

然后就会发现一个鹤立鸡群的数列:

\(X=2\)

同理写上暴力程序

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=4e5+10;
int n;
struct Node
{
	ll x,y;
}temp[N],w[N];
int a[N];
int read()
{
    int x=0,f=1;char s=getchar();
    while(s<'0'||s>'9'){if(s=='-')f=-f;s=getchar();}
    while(s>='0'&&s<='9'){x=x*10+s-48;s=getchar();}
    return x*f;
}
bool check(int n)
{
	int sum=1;
	bool mark[20];
	memset(mark,0,sizeof(mark));
	for(int i=1;i<=n;i++)
	{
		sum*=a[i];
		sum%=n;
		if(mark[sum]) return 0;
		mark[sum]=1;
	}
	return 1;
}
int main()
{
	for(int i=1;i<=9;i++)
	{
		for(int j=1;j<=i;j++)
		a[j]=j;
		do{
			if(!check(i)) continue;
			printf("OK:");
			for(int j=1;j<=i;j++)
			printf("%d ",a[j]);
			int sum=1;
			puts("");
			for(int j=1;j<=i;j++)
			{
				sum*=a[j];
				sum%=i;
				printf("%d ",sum);
			}
			puts("");
			puts("");
		}while(next_permutation(a+1,a+i+1));
	}
    return 0;
}

这就很容易发现,除了1和4,必须要质数才可以,而且有一个模序列鹤立鸡群

1 2 3 ... n-1 0

所以我们尝试构造这个序列,就是

由于\(s_i mod n =i\),故最开始的式子可以写作

这是一个线性同余方程,我们写成\((i-1)a_i+ny=i\),当\(n\)是质数时就有解

通解为\(x_0+kn\),显然在模\(n\)意义下,\(a_i\)是唯一的

同理我们把\(i\)当做未知数,写成\((a_i -1 )i\equiv a_i (mod n)\)

同理可以得到\(i\)也是唯一的,所以我们在递推的过程中,不会生成相同的\(a_i\),也就符合题意了

以上启发我们,如果有\(b_i \equiv f(i)\),而\(b_i\)是由\(b_{i-1}\)与\(a_i\)(其中\(a_i\)是给定的序列)通过某种关系得到,就可以把\(b_i\)换成\(f(i)\),就是把递推换成了通向,再去进行求解

标签:同理,12,int,ll,long,序列,我们
From: https://www.cnblogs.com/dingxingdi/p/17876104.html

相关文章

  • 2023.12.4 近期练习
    CF1845E这种\(01\)串的描述方式一般是提出\(1\)的位置去讨论,设原串\(1\)出现位置是\(p_1,...,p_m\).考虑最后生成的串的性质,描述其\(1\)的位置,\(q_1,...q_m\)。那么至少移动步数为\(\sum|p_i-q_i|\),因为\(1\)的位置是相对不变的。考虑一个一个\(1\)往里填,设\(......
  • AcWing 1205. 买不到的数目
    题面:水果糖被包成\(n\)颗一包和\(m\)颗一包的两种,用这两种包装来组合,不能拆包卖。在\(4\)颗一包和\(7\)颗一包的情况下,最大不能买到的数量是\(17\)。本题的要求就是在已知两个包装的数量时,求最大不能组合出的数字。原题链接:1205.买不到的数目-AcWing数论:组合......
  • 12.4每日总结
    今天完成了人机交互C/S结构用户界面设计【实验编号】10003809547j 图形用户界面设计【实验学时】8学时【实验环境】l 所需硬件环境为微机;l 所需软件环境为MicrosoftVisualStudio2013【实验内容】编写一整套Mis系统UI界面,Mis系统名称自拟,尽量运用到如下控件:l......
  • [ARC120E] 1D Party 题解
    提供二分+DP做法。Solution题意给出\(n(\le2\times10^5)\)个单调递增偶整数\(a_i\),求最小的\(k\)满足每一个\(i\)都可以在\(k\)时刻之前(含)与相邻的数相遇。每个单位时间可以移动一个单位距离。思路启发式思考在想到正解之前,我们可以想想类正解。显然,在时间一单......
  • 每日总结12.4
    (1)使用IntelliJIDEA工具开发WordCount程序在Linux系统中安装IntelliJIDEA,然后使用IntelliJIDEA工具开发WordCount程序,并打包成JAR文件,提交到Flink中运行。 (2)数据流词频统计使用Linux系统自带的NC程序模拟生成数据流,不断产生单词并发送出去。编写Flink程序对NC程序发来的......
  • 12.04每日总结
          ......
  • 【刷题笔记】124. Binary Tree Maximum Path Sum
    题目Givena non-empty binarytree,findthemaximumpathsum.Forthisproblem,apathisdefinedasanysequenceofnodesfromsomestartingnodetoanynodeinthetreealongtheparent-childconnections.Thepathmustcontain atleastonenode anddoes......
  • Codeforces Round 912 (Div. 2) - sol
    CodeforcesRound912(Div.2)-solCodeforcesRound912(Div.2)一直是因为晚上打太晚了就没有打过cf,所以只能vp了。/kk四道题有关位运算——不好评价。A.HalloumiBoxes给出\(n\)个数\(a_1,\dots,a_n\),和一个数\(k\)。问是否能通过任意次翻转\(\lek\)的连......
  • Codeforces Round 912 (Div. 2)
    CodeforcesRound912(Div.2)什么位运算专场A.HalloumiBoxes#include<bits/stdc++.h>#defineintlonglong#defineendl'\n'usingnamespacestd;inta[110];intn,k;voidsolve(){cin>>n>>k;for(inti=0;i<n;i++)cin&......
  • Codeforces Round 912 (Div. 2)补题B、C、D1
    CodeforcesRound912(Div.2)B.StORageroom思路\(a_i\)=\(M_i\)\(_1\)&\(M_i\)\(_2\)&\(M_i\)\(_3\)&...&\(M_i\)\(_n\)\((i!=j)\)ac代码#include<bits/stdc++.h>usingnamespacestd;usingi64=longlong......