Noip模拟101 2021.11.18
挂的太惨了,真的就是期望越大失望越大。。。。。
没想到非常有把握的题最后都是\(WA\),比较失望,比较悔恨,当时为啥不再看看
爆搜都能那么快怎么可能会对???事后想想也是颇为离谱
以后要多打打对拍了,否则考后看见分数容易自闭。。。。
可是显然今天也是原题大作战。。。题解越来越水了。。。。
T1 ladice
非常之水,可惜只有\(30pts\),不知道自己的哪里假了,
但是他就是假了,而且我不知道怎么卡,跑的挺快
思想跟正解一样,不过没有用冰茶姬维护,然而用冰茶姬维护代码会很短
于是考后用冰茶姬维护了一发就对了,所以没有调自己的假码。。。。
ladice
#include<bits/stdc++.h>
#define int long long
using namespace std;
namespace AE86{
FILE *wsn; int mzs;
#define scanf mzs=scanf
#define gc getchar
auto read=[](){
int x=0,f=1;char ch=gc();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=gc();}
while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch^48);ch=gc();} return x*f;
};
auto write=[](int x,char opt='\n'){
char ch[20];short len=0;if(x<0)x=~x+1,putchar('-');
do{ch[len++]=x%10+(1<<5)+(1<<4);x/=10;}while(x);
for(short i=len-1;i>=0;--i){putchar(ch[i]);}putchar(opt);
};
auto min_=[](int a,int b){return a<b?a:b;};
auto max_=[](int a,int b){return a>b?a:b;};
}using namespace AE86;
const int NN=3e5+5,inf=0x3fffffff;
int n,m,fa[NN];
bool vis[NN];
inline int getfa(int x){return fa[x]=(fa[x]==x)?x:getfa(fa[x]);}
inline void merge(int x,int y){
x=getfa(x); y=getfa(y);
if(x==y) return; fa[x]=y;
}
namespace WSN{
inline short main(){
n=read(); m=read();
for(int i=1;i<=m;i++)fa[i]=i;
for(int i=1;i<=n;i++){
int a=read(),b=read();
if(!vis[a]){
puts("LADICA");
vis[a]=1;
merge(a,b);
}else if(!vis[b]){
puts("LADICA");
vis[b]=1;
merge(b,a);
}else if(!vis[getfa(a)]){
puts("LADICA");
vis[getfa(a)]=1;
merge(a,b);
}else if(!vis[getfa(b)]){
puts("LADICA");
vis[getfa(b)]=1;
merge(b,a);
}else puts("SMECE");
}
return 0;
}
}
signed main(){return WSN::main();}
T2 card
是个\(dp\),然而爆搜跑得很快,过了所有样例就觉得稳了了,然后就死了
其实样例都比较小,但是当时以为他的\(HACK\)能力强就没管,果真死掉了
于是直接给出链接
card
#include<bits/stdc++.h>
#define int long long
using namespace std;
namespace AE86{
FILE *wsn; int mzs;
#define scanf mzs=scanf
#define gc getchar
auto read=[](){
int x=0,f=1;char ch=gc();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=gc();}
while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch^48);ch=gc();} return x*f;
};
auto write=[](int x,char opt='\n'){
char ch[20];short len=0;if(x<0)x=~x+1,putchar('-');
do{ch[len++]=x%10+(1<<5)+(1<<4);x/=10;}while(x);
for(short i=len-1;i>=0;--i){putchar(ch[i]);}putchar(opt);
};
auto checkmax=[](int&a,int b){a=a>b?a:b;};
}using namespace AE86;
const int NN=505,inf=4485090715960753727;
int n,c[NN],a[NN],v[NN],ans;
int f[2][NN][NN],g[2][NN][NN];
inline bool check(int x,int y){return !x||c[x]==c[y]||a[x]==a[y];}
namespace WSN{
inline short main(){
n=read();for(int i=1;i<=n;i++)c[i]=read(),a[i]=read(),v[i]=read();
memset(f,-0x3f,sizeof(f));memset(g,-0x3f,sizeof(g));
v[++n]=-inf;v[++n]=-inf;v[++n]=-inf;
g[0][1][0]=0;
for(int i=3,u=0;i<=n;i++,u^=1){
for(int j=0;j<=n;j++)
for(int k=0;k<=n;k++)f[u^1][j][k]=g[u^1][j][k]=-inf;
for(int j=0;j<=n;j++){
for(int k=0;k<=n;k++){
if(f[u][j][k]>=0){
checkmax(ans,f[u][j][k]);
if(check(i-1,i))checkmax(f[u^1][j][k],f[u][j][k]+v[i]);
if(check(i-1,j))checkmax(g[u^1][k][j],f[u][j][k]+v[j]);
}
if(g[u][j][k]>=0){
checkmax(ans,g[u][j][k]);
if(check(k,i))checkmax(f[u^1][j][i-1],g[u][j][k]+v[i]);
if(check(k,j))checkmax(g[u^1][i-1][j],g[u][j][k]+v[j]);
}
}
}
}
write(ans);
return 0;
}
}
signed main(){return WSN::main();}
T3 dojave
dojave
#include<bits/stdc++.h>
#define int long long
using namespace std;
namespace AE86{
FILE *wsn; int mzs;
#define scanf mzs=scanf
#define gc getchar
auto read=[](){
int x=0,f=1;char ch=gc();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=gc();}
while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch^48);ch=gc();} return x*f;
};
auto write=[](int x,char opt='\n'){
char ch[20];short len=0;if(x<0)x=~x+1,putchar('-');
do{ch[len++]=x%10+(1<<5)+(1<<4);x/=10;}while(x);
for(short i=len-1;i>=0;--i){putchar(ch[i]);}putchar(opt);
};
auto min_=[](int a,int b){return a<b?a:b;};
auto max_=[](int a,int b){return a>b?a:b;};
}using namespace AE86;
#define mpr make_pair
typedef pair<int,int> PII;
const int NN=(1<<21);
int sm[NN][2],a[NN],m,n,U,pos[NN],ans;
map<pair<int,int>,int> mp[4];
namespace WSN{
inline short main(){
srand(time(NULL)^clock());
m=read(); n=(1<<m); U=n-1; if(n==2) return puts("2"),0;
for(int i=1;i<=n;i++)a[i]=read(),pos[a[i]]=i;
for(int i=1;i<=n;i++){
sm[i][0]=sm[pos[a[i]^U]][0]=rand();
sm[i][1]=sm[pos[a[i]^U]][1]=rand();
}
for(int i=1;i<=n;i++)
sm[i][0]^=sm[i-1][0],sm[i][1]^=sm[i-1][1];
ans=n*(n+1)>>1;
mp[0][mpr(0,0)]=1;
for(int i=1,opt=i%4;i<=n;i++,opt=i%4){
PII now=mpr(sm[i][0],sm[i][1]);
ans-=mp[opt][now];
++mp[opt][now];
}
write(ans);
return 0;
}
}
signed main(){return WSN::main();}
T4 drop
drop
#include<bits/stdc++.h>
#define int long long
using namespace std;
namespace AE86{
FILE *wsn; int mzs;
#define scanf mzs=scanf
#define gc getchar
auto read=[](){
int x=0,f=1;char ch=gc();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=gc();}
while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch^48);ch=gc();} return x*f;
};
auto write=[](int x,char opt='\n'){
char ch[20];short len=0;if(x<0)x=~x+1,putchar('-');
do{ch[len++]=x%10+(1<<5)+(1<<4);x/=10;}while(x);
for(short i=len-1;i>=0;--i){putchar(ch[i]);}putchar(opt);
};
auto min_=[](int a,int b){return a<b?a:b;};
auto max_=[](int a,int b){return a>b?a:b;};
}using namespace AE86;
const int NN=501,MM=25001;
int n,a[NN];
bitset<MM>f[NN];
namespace WSN{
inline short main(){
n=read();for(int i=1;i<=n;i++)a[i]=read();
sort(a+1,a+n+1,[](int a,int b)->bool{return a>b;});
f[1][0]=1;
for(int i=2;i<=n;i++){
f[i]|=f[i-1];
for(int j=2;j<i;j++) f[i]|=(f[i-1]<<a[j]-a[i]);
}
for(int i=0;i<=25000;i++)if(f[n][i])write(i,' ');
puts("");
return 0;
}
}
signed main(){return WSN::main();}