Day 0
对着大纲找了点很板子的题做,主要找的dcc和scc缩点、树形DP和DP优化、KMP之类的。睡前祈祷不要失眠,结果在即将睡着后外面传来钢琴声,直接失眠........emmmmmmm。
Day 1
精神不是很好,早饭感觉吃得有点油,一直到考时候十几分钟都有呕吐感,考前还拉了肚子。状态肯定没有CSP时好,但硬着头皮直接冲进考场。
那道题目,第一眼感觉题目名字比较正常,但看到T4的chess的时候下意识想到了 奆佬PG 昨天押的博弈论,有点害怕,就快速看了一下题目。看完题目我就大概知道我今年NOIP的结果了.......今年T1、T4题目较长,但都很好理解,T1看到 \(x\leq 10^7\) 就知道感觉可以类似线筛直接预处理答案,想了十几秒发现线筛不现实,但感觉合法的数不多,拿埃筛稍微剪剪枝或许能卡过,然后就看T2。T2不长,但我还是理解了一会儿题目意思,感觉到是一个DP,但并没有很好的思路,主要是那个二进制下 \(1\) 的个数不超过 \(K\) 带来了进位等一系列难处理的问题,于是觉得今年要稳就必须把T2想出来。T3的意思很简单,但完全没有思路,但爆搜应该很好写。T4太长了,各种走法,于是我决定先回去把T1写了。
大概犹豫了一会儿有没有更优的做法,没想到就直接把代码冲上去。中途因为 \(10^7\) 只枚举了六个数位等低级错误耽搁了一小会儿时间,\(9:00\) 过完所有样例。
然后想T2,。不夸张的说,想T2的时间是整场考试最痛苦的时间,不仅有难处理的各种问题,还有见到数据范围就知道是自己很不熟练的多维DP。硬着头皮去设计一个DP状态,但还是处理不了进位,以及一些组合的问题,想了一会儿,忘了时间,就又去想了会儿T3。
手玩那个操作的时候,发现对相邻两个数操作之后,得到的数有点规律,但没太看得出来(考完了才知道是交换差分数组),又推了一下方差的公式,以为有用,结果啥用都没有,浪费时间.......
有点慌了,只写了 \(100pts\) ,加上没打的T2的暴力 \(50pts\) 和T3的暴力 \(10pts\) (一开始以为只有 \(10pts\) ) ,还没
上 \(200pts\) 。于是决定看一下 T4 看暴力分有多少。发现题目意思不是很复杂,每种道路可以分开算,暴力就直接模拟即可,有 \(32pts\) ,就决定拿了就跑路。中途又调试了一会儿,复杂度写假了一个小地方,花了一个小时才稳过暴力的样例。
打完T2T3的暴力后,剩下的一段时间就一直在想T2了,各种DP的方法都尝试过,等绕不卡那几个圈子,唯一一次感觉是对的算法我又认为复杂度会多一点,而且很难写,就放弃了。之后又尝试了另一种思路,写上去感觉很有道理,但还是算漏了一些组合情况,而这时,我已经能确定这场NOIP的结果了。于是我开始边检查代码,边思考如何面对考场外面的世界.......苛责是绝不会少的,至少对于某来说。同学和老师会来问我考得怎么样,我该如何回答。一堆whk蜂拥而至,而oi自然是要停一会儿了。
当保持安静的几个大字出现在所有人的屏幕上时,一切都结束了,一切又都开始了。
出门,先看到PG,看脸知道也考得不好,下楼统计了一下,PG、green_orange、ycz都做出来了(但洛谷测了后ycz挂了),T4PG想出了平衡树启发式合并的做法,但没打出来,暴力也没调出来。感觉高二学长要集体退役了,而我们也还只剩最后一次机会了。
下午在洛谷上测了一下,T4暴力挂了 \(8pts\) ,清空把时间复杂度清假了,但貌似不是很重要了,这个分数段1=应该是稳的,省队就做梦吧。
心情不太好,游记都是第二天才写的,中间还有很多细节懒得回忆,大概记录一下,准备回去补whk了。
附录
期望得分:
\[100pts+50pts+20pts+24pts=194pts \]考场代码:
T1:
#include<bits/stdc++.h>
#define inl inline
#define rep(i,x,y) for(int i=(x);i<=(y);++i)
#define per(i,x,y) for(int i=(x);i>=(y);--i)
#define pii pair<int,int>
#define vi vector<int>
#define mp make_pair
#define fi first
#define se second
#define eb emplace_back
using namespace std;
template<typename T>inl void exg(T &x,T &y){ x^=y^=x^=y; }
template<typename T>inl void chkmn(T &x,const T &y){ (x>y) && (x=y); }
template<typename T>inl void chkmx(T &x,const T &y){ (x<y) && (x=y); }
const int maxn=1e7+10,N=1e7;
int T,x;
int nxt[maxn];
bool ban[maxn];
int main(){
freopen("number.in","r",stdin);
freopen("number.out","w",stdout);
scanf("%d",&T);
rep(a,0,9) rep(b,0,9) rep(c,0,9) rep(d,0,9) rep(e,0,9) rep(f,0,9) rep(g,0,9)
if(!((a ^ 7) && (b ^ 7) && (c ^ 7) && (d ^ 7) && (e ^ 7) && (f ^ 7) && (g ^ 7))){
const int x=a*1000000+b*100000+c*10000+d*1000+e*100+f*10+g;
if(!ban[x] && x) rep(i,1,N/x) ban[x*i]=1;
}
per(i,N+5,1) if(!ban[i]) nxt[i-1]=i;
per(i,N+5,1) if(!nxt[i]) nxt[i]=nxt[i+1];
while(T--){
scanf("%d",&x);
if(ban[x]) puts("-1");
else printf("%d\n",nxt[x]);
}
return 0;
}
T2:
#include<bits/stdc++.h>
#define inl inline
#define rep(i,x,y) for(int i=(x);i<=(y);++i)
#define repp(i,x,y,d) for(int i=(x);i<=(y);i+=(d))
#define per(i,x,y) for(int i=(x);i>=(y);--i)
#define pii pair<int,int>
#define vi vector<int>
#define mp make_pair
#define fi first
#define se second
#define eb emplace_back
using namespace std;
typedef long long LL;
template<typename T>inl void exg(T &x,T &y){ x^=y^=x^=y; }
template<typename T>inl void chkmn(T &x,const T &y){ (x>y) && (x=y); }
template<typename T>inl void chkmx(T &x,const T &y){ (x<y) && (x=y); }
const int MOD=998244353;
inl int inc(int a,int b){ return (a+b>=MOD) ? a+b-MOD : a+b; }
inl int mul(int a,int b){ return 1LL*a*b%MOD; }
inl void Inc(int &a,int b){ ((a+=b)>=MOD) && (a-=MOD); }
inl void Mul(int &a,int b){ a=1LL*a*b%MOD; }
inl void Sqr(int &a){ a=1LL*a*a%MOD; }
int KSM(int a,int x=MOD-2){
int res=1;
while(x){
if(x & 1) Mul(res,a);
Sqr(a),x>>=1;
}return res;
}
const int maxn=110;
int n,m,k;
int v[maxn];
namespace case_1{
int f[32][1<<17];
void Work(){
f[0][0]=1;
rep(i,0,n-1) rep(j,0,(1<<17)-1) if(f[i][j]) rep(l,0,m){
const int x=j+(1<<l);
Inc(f[i+1][x],mul(f[i][j],v[l]));
}int ans=0;
rep(i,0,(1<<17)-1) if(__builtin_popcount(i)<=k) Inc(ans,f[n][i]);
printf("%d\n",ans);
}
}
//namespace case_2{
// int g[maxn][35],f[maxn][35][35],fac[35],fiv[35];
// inl int Binom(int x,int y){ return mul(fac[x],mul(fiv[y],fiv[x-y])); }
// void Work(){
// fac[0]=1;
// rep(i,1,n) fac[i]=mul(fac[i-1],i);
// fiv[n]=KSM(fac[n]);
// per(i,n-1,0) fiv[i]=mul(fiv[i+1],i+1);
//
// rep(i,0,m+5){
// g[i][1]=v[i];
// rep(j,2,n) rep(l,0,i) if(j>=(1<<(i-l))) Inc(g[i][j],mul(g[l][j-(1<<(i-l))],Binom(i,l)));
//
//// Inc(g[i][j],mul(g[i-1][k],g[i-1][j-k]));
// }
//
//// rep(i,0,m+5){
//// rep(j,1,n) printf("%d ",g[i][j]);
//// puts("");
//// }
//
// f[0][1][1]=v[0],f[0][0][0]=1;
// rep(i,1,m+5) rep(j,0,n) rep(l,0,k){
// f[i][j][l]=f[i-1][j][l];
// rep(x,1,j) Inc(f[i][j][l],mul(f[i-1][j-x][l-1],g[i][x]));
//// printf("%d %d %d %d\n",i,j,l,f[i][j][l]);
// }int ans=0;
// rep(i,1,k) Inc(ans,f[m+5][n][i]);
// printf("%d\n",ans);
// }
//}
int main(){
freopen("sequence.in","r",stdin);
freopen("sequence.out","w",stdout);
scanf("%d%d%d",&n,&m,&k);
rep(i,0,m) scanf("%d",&v[i]);
case_1::Work();
return 0;
}
T3:
#include<bits/stdc++.h>
#define inl inline
#define rep(i,x,y) for(int i=(x);i<=(y);++i)
#define per(i,x,y) for(int i=(x);i>=(y);--i)
#define pii pair<int,int>
#define vi vector<int>
#define mp make_pair
#define fi first
#define se second
#define eb emplace_back
using namespace std;
typedef long long LL;
template<typename T>inl void exg(T &x,T &y){ x^=y^=x^=y; }
template<typename T>inl void chkmn(T &x,const T &y){ (x>y) && (x=y); }
template<typename T>inl void chkmx(T &x,const T &y){ (x<y) && (x=y); }
const int maxn=1e4+5;
int n;
LL ans=1e18;
vi a;
set<LL>st;
LL Trans(vi x){
LL ans=0;
rep(i,0,n-1) ans=ans*40+x[i];
return ans;
}
void DFS(const vi &a){
LL tmp1=0,tmp2=0;
rep(i,0,n-1) tmp1+=a[i]*a[i],tmp2+=a[i];
chkmn(ans,n*tmp1-tmp2*tmp2);
rep(i,1,n-2){
vi b=a;
b[i]=b[i+1]+b[i-1]-b[i];
const LL y=Trans(b);
if(!st.count(y)) st.insert(y),DFS(b);
}
}
int main(){
freopen("variance.in","r",stdin);
freopen("variance.out","w",stdout);
scanf("%d",&n);
a.resize(n);
rep(i,0,n-1) scanf("%d",&a[i]);
st.insert(Trans(a));
DFS(a);
printf("%lld\n",ans);
return 0;
}
T4:
#include<bits/stdc++.h>
#define inl inline
#define rep(i,x,y) for(int i=(x);i<=(y);++i)
#define per(i,x,y) for(int i=(x);i>=(y);--i)
#define pii pair<int,int>
#define vi vector<int>
#define vii vector<pii>
#define mp make_pair
#define fi first
#define se second
#define eb emplace_back
using namespace std;
template<typename T>inl void exg(T &x,T &y){ x^=y^=x^=y; }
template<typename T>inl void chkmn(T &x,const T &y){ (x>y) && (x=y); }
template<typename T>inl void chkmx(T &x,const T &y){ (x<y) && (x=y); }
const int maxn=2e5+5;
int _T,n,m,q;
vii c[maxn];
vector<bool> b1[maxn],b2[maxn],b3[maxn],vis[maxn];
string S[maxn],T[maxn];
pii _q[maxn<<4];
int main(){
freopen("chess.in","r",stdin);
freopen("chess.out","w",stdout);
ios::sync_with_stdio(false);
cin.tie(0);
cin>>_T;
while(_T--){
cin>>n>>m>>q;
rep(i,1,n){
cin>>S[i],c[i].resize(m+1),b1[i].resize(m+1),b2[i].resize(m+1),b3[i].resize(m+1),vis[i].resize(m+1);
rep(j,1,m) c[i][j]=mp(0,0);
}rep(i,1,n-1) cin>>T[i];
int col,lv,x,y;
while(q--){
cin>>col>>lv>>x>>y;
if((x ^ 1) && T[x-1][y-1]=='1'){ if(!c[x-1][y].se || ((c[x-1][y].fi ^ col) && c[x-1][y].se<=lv)) b1[x-1][y]=1; }
if((x ^ n) && T[x][y-1]=='1'){ if(!c[x+1][y].se || ((c[x+1][y].fi ^ col) && c[x+1][y].se<=lv)) b1[x+1][y]=1; }
if((y ^ 1) && S[x][y-2]=='1'){ if(!c[x][y-1].se || ((c[x][y-1].fi ^ col) && c[x][y-1].se<=lv)) b1[x][y-1]=1; }
if((y ^ m) && S[x][y-1]=='1'){ if(!c[x][y+1].se || ((c[x][y+1].fi ^ col) && c[x][y+1].se<=lv)) b1[x][y+1]=1; }
int xx=x,yy=y;
while(xx ^ 1){
if(T[xx-1][yy-1]=='2'){
--xx;
if(c[xx][yy].se){
if((c[xx][yy].fi ^ col) && c[xx][yy].se<=lv) b2[xx][yy]=1;
break;
}b2[xx][yy]=1;
}else break;
}xx=x,yy=y;
while(xx ^ n){
if(T[xx][yy-1]=='2'){
++xx;
if(c[xx][yy].se){
if((c[xx][yy].fi ^ col) && c[xx][yy].se<=lv) b2[xx][yy]=1;
break;
}b2[xx][yy]=1;
}else break;
}xx=x,yy=y;
while(yy ^ 1){
if(S[xx][yy-2]=='2'){
--yy;
if(c[xx][yy].se){
if((c[xx][yy].fi ^ col) && c[xx][yy].se<=lv) b2[xx][yy]=1;
break;
}b2[xx][yy]=1;
}else break;
}xx=x,yy=y;
while(yy ^ m){
if(S[xx][yy-1]=='2'){
++yy;
if(c[xx][yy].se){
if((c[xx][yy].fi ^ col) && c[xx][yy].se<=lv) b2[xx][yy]=1;
break;
}b2[xx][yy]=1;
}else break;
}int head=1,tail=1;
_q[tail++]=mp(x,y);
while(head<tail){
pii p=_q[head++];
if(c[p.fi][p.se].se){
if((c[p.fi][p.se].fi ^ col) && c[p.fi][p.se].se<=lv) b3[p.fi][p.se]=1;
continue;
}else b3[p.fi][p.se]=1;
if(p.fi ^ 1){ if(T[p.fi-1][p.se-1]=='3' && !vis[p.fi-1][p.se]) _q[tail++]=mp(p.fi-1,p.se),vis[p.fi-1][p.se]=1; }
if(p.fi ^ n){ if(T[p.fi][p.se-1]=='3' && !vis[p.fi+1][p.se]) _q[tail++]=mp(p.fi+1,p.se),vis[p.fi+1][p.se]=1; }
if(p.se ^ 1){ if(S[p.fi][p.se-2]=='3' && !vis[p.fi][p.se-1]) _q[tail++]=mp(p.fi,p.se-1),vis[p.fi][p.se-1]=1; }
if(p.se ^ m){ if(S[p.fi][p.se-1]=='3' && !vis[p.fi][p.se+1]) _q[tail++]=mp(p.fi,p.se+1),vis[p.fi][p.se+1]=1; }
}int ans=0;
rep(i,1,n) rep(j,1,m){
if(b1[i][j] || b2[i][j] || b3[i][j]){
b1[i][j]=b2[i][j]=b3[i][j]=0;
if((i ^ x) || (j ^ y)) ++ans;
}vis[i][j]=0;
}cout<<ans<<endl;
c[x][y]=mp(col,lv);
}
}
return 0;
}
Update 12.4
emmmmmmmmmmmmmmm,有被卷到,荣登榜首,超第二二十多分,CQ真强!
1=没了,下一年的压力更大了。
whk补得差不多了,卷!
标签:templateinl,const,NOIP,int,void,2021,游记,rep,define From: https://www.cnblogs.com/Sword-K/p/16840878.html