11.13 NOIP2024模拟赛#20 div1

挂大疯

T1

迅速码了个 dp 与 dfs 拿到了 \(60\)

然后不知道咋想的写了个在模意义下相等的 dp,发现样例全过?

于是交上去,成功 MLE 了

赛后知道了规律,然后写个高精度过了

然额你自然溢出也能过()

把我的 dp 改改,发现有 \(60\),但是不知道为什么被 Hack 了

(可恶的 Subtask)

……

点击查看代码
#include<bits/stdc++.h>
#define int long long
#define ll long long
#define fd(i,a,b) for(int i=(a);i<=(b);i=-~i)
#define bd(i,a,b) for(int i=(a);i>=(b);i=~-i)
#define db(x) cout<<"DEBUG "<<#x<<" = "<<x<<endl;
#define endl '\n'
using namespace std;

//#define SIZE (1<<20)
//char In[SIZE],Out[SIZE],*p1=In,*p2=In,*p3=Out;
//#define getchar() (p1==p2&&(p2=(p1=In)+fread(In,1,SIZE,stdin),p1==p2)?EOF:*p1++)
inline int read()
{
	int x=0,f=1;char c=getchar();
	while(c<'0'||c>'9'){if(c=='-') f=-1;c=getchar();}
	while(c>='0'&&c<='9'){x=x*10+(c-48);c=getchar();}
	return x*f;
}

const int N=1e3+509,M=1e5+509,mod=9e4+1;

int n,m,a[N],b[N];
map<int,int> fa,fb;
vector<int> nwa,nwb;

template<int len>
struct __int
{
	int num[len+5];
	__int(){memset(num,0,sizeof(num));}
	inline __int operator+(__int y)
	{
		__int<len> res;
		fd(i,0,len)
		{
			res.num[i]+=num[i]+y.num[i];
			res.num[i+1]+=res.num[i]/10;
			res.num[i]%=10;
		}
		return res;
	}
	inline __int operator*(int y)
	{
		__int<len> res;
		fd(i,0,len)
		{
			res.num[i]+=y*num[i];
			res.num[i+1]+=res.num[i]/10;
			res.num[i]%=10;
		}
		return res;
	}
	inline __int operator/(int y)
	{
		__int<len>res=(*this);
		bd(i,len,0)
		{
			res.num[i-1]+=res.num[i]%y*10;
			res.num[i]/=y;
		}
		return res;
	}
	inline bool operator<(__int y)
	{
		bd(i,len,0)
			if(y.num[i]!=num[i]) return num[i]<y.num[i];
		return 0;
	}
	inline bool operator==(__int b)
	{
		return (!(b<(*this)))&&(!((*this)<b));
	}
	inline void print()
	{
		bd(i,8,0) cerr<<num[i];
		cerr<<'\n';
	}
};

signed main()
{
#define FJ
#ifdef FJ
	freopen("bag.in","r",stdin);
	freopen("bag.out","w",stdout);
#else
//	freopen("C:/Users/Lenovo/Desktop/比赛/2024.11.13/bag/1.in","r",stdin);
//	freopen("C:/Users/Lenovo/Desktop/比赛/2024.11.13/bag/bag.out","w",stdout);
#endif
//#define io
#ifdef i
	ios::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);
#endif
	
	n=read(),m=read();
	fd(i,1,n) a[i]=read(),fa[a[i]]++;
	fd(i,1,m) b[i]=read(),fb[b[i]]++;
	
	fd(i,1,n)
	{
		if(fb[a[i]]>1)
		{
			puts("N");
			return 0;
		}
		if(fb[a[i]]) continue;
		nwa.push_back(a[i]);
	}
	
	fd(i,1,m)
	{
		if(fa[b[i]]) continue;
		nwb.push_back(b[i]);
	}
	
	__int<9876> V,B,S;
	
	V.num[0]=1,B.num[0]=1;
	for(auto c:nwa) V=V*c;
	for(auto c:nwb) B=B*c;
	for(auto c:nwa)
	{
		auto now=V/c;
		S=S+now;
	}
	
	if(S==B) puts("S");
	else puts("N");
	
	return 0;
}

T2

暴力根本不会码

(lihe_qwq 达捞的假 dp 有 \(20\) %%%)

T3

赛时码的分块,但是最劣复杂度是 \(O(nq)\)

但是有 \(30\)

赛后知道平方取模是循环的

复杂度是 \(O(T n \sqrt{n})\),其中 \(T\) 是循环节?

打表发现 \(T \le 24\)()

T4

未知领域

码的暴力

总结

其实我最后一个小时啥都没干

T1 挂 \(60\) 分,其他的都是大众分

但是不知道为什么我的模意义下的 dp 是怎么被 hack 的

posted @ 2024-11-13 17:31  whrwlx  阅读(12)  评论(0编辑  收藏  举报