话说这次考试
Drink
非常棒的一道卡常练习题,适合练习卡常
真的很棒
前置卡常知识
1.char要比int快
char是最快的
输出putchar,输入getchar
快了7000豪
2.read
快读非常棒,让你变得更快
3.循环展开
循环展开非常棒,虽然看上去没什么用,然而循环展开往往是使你从T到A的关键
扫描二维码关注公众号,回复:
6999902 查看本文章
4.inline
inline没什么用
大多数时候都没有什么用,一般时间不会发生什么变化,然而在mex这个题inline突然变得有用
突然变快.jpeg
5.register
大多数时候都没有什么用,然而有时会突然变快,有时还会变慢
暂时没有例子,(或者说只有变慢的例子)
6.STL
priority_queue手打,
stack手打
map手打(不是让你打红黑树,是hash表)
stack真的慢,stack打起来也好打,手打
7.mod
define或者const
定义成变量会很慢,
8.*2变<<1 /2 变>>1 ==变 ! ^
应用到这个题呢
char+循环展开
代码
#include<bits/stdc++.h> using namespace std; #define ll int #define A 2100 char a[A][A]; ll n,m,k; const int L=1<<20|1; char buffer[L],*S,*T; #define getchar() ((S==T&&(T=(S=buffer)+fread(buffer,1,L,stdin),S==T))?EOF:*S++) const int maxn=100000+5; inline int read(){ register int ret; register char r; while(r=getchar(),r<'0'||r>'9');ret=r-48; while(r=getchar(),r>='0'&&r<='9')ret=ret*10+r-48; return ret; } int main(){ n=read(),m=read(),k=read(); for(ll i=1;i<=n;i++) for(ll j=1;j<=m;j++){ register int ret; char r=getchar(); while(!isdigit(r)) r=getchar(); a[i][j]=r; } for(ll j=1,x,y,c,xl,yl;j<=k;j++){ x=read(),y=read(),c=read(); xl=x+c-1,yl=y+c-1; while(c>1){ for(ll i=0;i<=c-2;i++){ ll a1=a[xl-i][y],a2=a[x][y+i],a3=a[x+i][y+c-1],a4=a[x+c-1][yl-i]; a[x][y+i]=a1,a[x+i][yl]=a2,a[xl][yl-i]=a3,a[xl-i][y]=a4; } x++,y++,yl--,xl--,c-=2; } } for(ll i=1;i<=n;i++,puts("")) for(ll j=1;j<=m;j++){ putchar(a[i][j]);putchar(' '); } }
blue
这个题它不卡set它卡splay!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
贪心
代码
#include<bits/stdc++.h> using namespace std; #define A 5010101 #define Inf 10000000ll #define ll long long #define py printf("*****\n") #define mem(a) memset(a,0,sizeof(a)) ll landu[A],head[A],nx[A],ver[A],edg[A],dep[A],a[A],bl[A],blx[A],ch[A][2],cnt[A],size[A],key[A],fa[A]; ll n,m,tot=1,S,T,t,D,L,sz,rt; set<ll> s; inline ll read(){ ll f=1,x=0;char c=getchar(); while(!isdigit(c)) { if(c=='-') f=-1; c=getchar(); } while(isdigit(c)){ x=(x<<1)+(x<<3)+c-'0'; c=getchar(); } return f*x; } inline void clear(ll x) { ch[x][0]=ch[x][1]=key[x]=cnt[x]=fa[x]=size[x]=0; } inline bool get(ll x) { return ch[fa[x]][1]==x; } inline void pushup(ll x) { if(x) { size[x]=cnt[x]; if(ch[x][1]) size[x]+=size[ch[x][1]]; if(ch[x][0]) size[x]+=size[ch[x][0]]; } } inline void rotate(ll x) { ll old=fa[x],oldfa=fa[old],which=get(x); ch[old][which]=ch[x][which^1]; fa[ch[old][which]]=old; ch[x][which^1]=old; fa[old]=x; fa[x]=oldfa; if(oldfa) ch[oldfa][ch[oldfa][1]==old]=x; pushup(old);pushup(x); return ; } inline void splay(ll x) { for(ll f;f=fa[x];rotate(x)) if(fa[f]) rotate(get(f)==get(x)?f:x); rt=x; } inline ll pre() { if(cnt[rt]>1) return rt; ll now=ch[rt][0]; while(ch[now][1]) now=ch[now][1]; return now; } inline ll nxt() { if(cnt[rt]>1) return rt; ll now=ch[rt][1]; while(ch[now][0]) now=ch[now][0]; return now; } inline void insert(ll x) { if(rt==0) { sz++;rt=sz; cnt[sz]=size[sz]=1; key[sz]=x; fa[sz]=ch[sz][0]=ch[sz][1]=0; return ; } ll f=0,now=rt; while(233) { if(key[now]==x) { cnt[now]++; pushup(now); pushup(f); splay(now); return ; } f=now,now=ch[now][key[now]<x]; if(now==0) { sz++; cnt[sz]=size[sz]=1; key[sz]=x;fa[sz]=f; ch[sz][1]=ch[sz][0]=0; ch[f][key[f]<x]=sz; pushup(f);splay(sz);return ; } } } inline ll rnk(ll x) { ll ans=1,now=rt; while(1) { if(x<key[now]) now=ch[now][0]; else { ans+=size[ch[now][0]]; if(x==key[now]) { splay(now);return ans; } ans+=cnt[now]; now=ch[now][1]; } } } inline void del(ll x) { rnk(x); if(cnt[rt]>1) {cnt[rt]--;pushup(rt);return ;} if(!ch[rt][0]&&!ch[rt][1]) {clear(rt);rt=0;return ;} if(!ch[rt][0]||!ch[rt][1]) { ll old=rt; rt=ch[rt][1]|ch[rt][0]; clear(old); fa[rt]=0; return ; } ll older=rt; ll leftbigest=pre(); splay(leftbigest); ch[rt][1]=ch[older][1]; fa[ch[older][1]]=rt; clear(older); pushup(rt); } void re(){ memset(ch,0,sizeof(ch)); memset(size,0,sizeof(size)); memset(key,0,sizeof(key)); memset(fa,0,sizeof(fa)); } int main() { set<ll>::iterator it; scanf("%lld",&t); while(t--){ n=read(),m=read(),D=read(),L=read(); s.clear(); s.insert(-0x7ffffff); for(ll i=1;i<=n;i++){ a[i]=read(); // insert(a[i]); s.insert(a[i]); } ll ok=1,cnt=0; while(ok){ ll now=0; while(now<L){ if(now+D>=L) break; // insert(now+D); // ll x=pre(); // del(now+D); ll x=*--s.upper_bound(now+D); // printf("x=%lld cnt=%lld\n",x,cnt); if(x<now){ ok=0; break; } // now=key[x]; now=x; s.erase(x); // del(key[x]); } if(ok==0) break; cnt++; if(cnt==m) break; } if(cnt!=m) printf("%lld\n",cnt); else printf("Excited\n"); } }