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 的
本文来自博客园,作者:whrwlx,转载请注明原文链接:https://www.cnblogs.com/whrwlx/p/18544384