找规律专题


https://www.luogu.com.cn/problem/P1984

当时一直在推 发现根本就推不出来 发现别人都是直接上OEIS 学到了

#include
using namespace std;
#define rep(i,a,b) for(int i=a;i>=1;
	}
	return ans%mod;
}
ll F[maxn*2],inv[maxn];
void init(){
    rep(i,1,maxn)inv[i]=pow_mod(i,mod-2,mod);
	F[0]=1;for(int i=1;i

直觉告诉我们 这道题和奇偶性有关

首先发现 答案只有可能是n×m 或者n×m+1 并且只要n和m有一个为偶数 就一定只是n×m

再找可以跨越的点 首先想到和(1,1)产生联系的点 这个相对好找一些 真的得耐下性子来找 比的就是谁更耐性

最后发现

这些点与(1,1)连接的话 可以使得答案减一 但是要是其他点相连呢 大胆猜测 只要是这些点就行 不然真心没法模拟

大胆猜测!!!!

#include
using namespace std;
int main()
{
    int n, m, k;
    int t;
    cin >> t;
    while (t--)
    {
        int n,m,k;
        scanf("%d%d%d",&n,&m,&k);
        int flag=0;
        for(int i=0; i

这是一道训练比赛技巧的很好的一道题

如果一个点的值是一个质数 那么只要其他点和该点连接一定是价值最小的 n-1

但是怎么才能确保至少含有一个素数呢?

小数据我们肯定是可以暴力的 这个题典型可以打表 !!!

发现n大于1000的 一定都只会出现n-1

n小于1000的 为了更大的缩小可能出现的差错 可以取5000 直接暴力克鲁斯卡尔

但是有一种情况 !!!L=R时 每条边都是L 答案就是L×(n-1)

证明的话我觉得很牵强 不过还是有道理