9.19[XJOI] NOIP训练37

上午[XJOI] NOIP训练37

T1 同余方程

Problem description

已知一个整数a,素数p,求解 $x^{2}equiv a(mod p) $ 是否有整数解

Solution

据说是二次剩余
作为一个蒟蒻,非常不正经的来证一下
由于p是质数,所以

(1) 当p=2,则一定有解

(2) 如果p<>2

(xequiv a^{frac{1}{2}}(mod p))
(x^{p-1}equiv a^{frac{p-1}{a}}(modp))
又因为费马小定理
(x^{p-1}equiv 1(modp))
所以(a^{frac{p-1}{2}}equiv 1(modp)),
这样就很完美的得到了答案

Code

#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll T,a,p,ans;
ll pow(ll a,ll b){
    ll res=1,base=(b-1)/2;
    if (a==0) return 0;
    while(base){
        if (base&1) res=res*a%b;
        base>>=1; a=a*a%b;
    }
    return res;
}
int main(){
    scanf("%d",&T);
    while (T--){
        scanf("%lld%lld",&a,&p);
        ans=pow(a,p);
        if (ans==1) printf("YES
");
            else printf("NO
");
    }
}

T2 重复串

Problem description

求最少删掉几个字符,使得最后答案成为重复串

Solution

这可能是我做过最简单的T2吧,
最暴力的O((n^{3}))Dp,枚举中点,然后做一个lcs

T3 摘苹果

Solution

直接进行树上贪心,对于每个节点,将它的每个子节点当做一个叶子结点(及合并了子树的信息),
然后找出最大的l,然后判断哪些子节点的r小于这个l,那么这说明只能独立减掉。
其他的节点则可以合并到根节点上,变成一个节点,只是lr变了一下而已。
(此段文字为whc大佬所言) 在此%%%whc

Code

#include<bits/stdc++.h>
using namespace std;
int l,r,ans=0;
void dfs(int &l,int &r){
	int k,x,y;
	l=0; scanf("%d",&k);
	if (k==0) scanf("%d%d",&l,&r);
	else {
		vector <int> a;
		for (int i=0;i<k;++i)
			dfs(x,y),l=max(l,x),a.push_back(y);
		sort(a.begin(),a.end());
		for (int i=0;i<k;++i)
			if (a[i]<l) ++ans; 
			else{
				r=a[i]; return;
			}
	}
}
int main(){
	dfs(l,r);
	printf("%d",ans+1);
	return 0;
}

下午及晚上

非常快的迅速订完题目,然后的然后,我也不知道了


一日总结

今天破天荒的用了一下markdown来写博客
对于这个不能调字体我也是非常无奈啊
决定如果没有数学题,绝不用markdown
还有这里我要严重吐槽一下各科老师,对!所有老师!
一次又一次的加深了我对xj的**感情
当然我会努力只在这里呆一年的,但对于在这儿的每一天,我一定都会过好

原文地址:https://www.cnblogs.com/logic-yzf/p/7552472.html