1.12闲话

发布时间 2024-01-12 17:07:46作者: Vsinger_洛天依

听说HE中考体育又改了,我去,我居然1000m有机会满分了

推歌:不老不死/洛天依 by 阿良良木建

听说今晚打模拟赛,怎么感觉别人都是 rp++ 只有我好像要 rk++ 了

经过K8He的指导(让我板刷ABC),但是我这场的EF都没写因为想模拟赛之前去复习一下板子

ABC300

  • A:N-choice question

    • 题意:

      就是说在一个序列里找到\(a+b\)在其中的排名

    • 思路:

      按照题意模拟即可

    代码不放了

  • B:Same Map in the RPG World

    • 题意:

      给定两个矩阵\(a\)\(b\), 现在可以对\(b\)进行两种操作: 一是把矩阵第一行放到最后一行; 二是把矩阵第一列放到最后一列; 问是否能通过有限次操作让两个矩阵相同;

    • 思路:

      因为行列都小于 30 ,我们直接按照大力模拟即可

    代码不放了

  • C:Cross

    • 题意:

      给定只有'#'和'.'组成的矩阵, 问由'#'组成的各种大小的X形状的有多少个

    • 思路:

      又是小数据范围,直接大力模拟即可

    • 代码

      天依给了你一份神秘代码$qwq$
      #include<bits/stdc++.h>
      #define int long long
      #define cin std::cin
      #define cout std::cout
      inline int min(const int x,const int y){
          return x<y?x:y;
      }
      inline int max(const int x,const int y){
          return x>y?x:y;
      }
      inline int read(){
          int f=1,b=0;char ch=getchar();
          while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
          while(ch>='0'&&ch<='9'){b=(b<<3)+(b<<1)+ch-'0';ch=getchar();}
          return f*b;
      }
      using namespace std;
      const int N=1100;
      char g[N][N];
      const int dx[]={1,1,-1,-1};
      const int dy[]={1,-1,1,-1};
      int n,m;
      map<int, int> mp;
      inline void check(int x, int y) {
          bool f=1;
          int tot=0;
          while(true){
              for(int i=0;i<4;i++){
                  int a=x+dx[i]*(tot+1), b = y + dy[i]*(tot+1);
                  if((a<1)||(a>n)||(b<1)||(b>m)||g[a][b]!='#') {
                      f=0;break;
                  }
              }
              if(!f) break;
              tot++;
          }
          mp[tot]++;
      }
      signed main(){
          n=read(),m=read();
          for(int i=1;i<=n;i++)
              for(int j=1;j<=m;j++)
                  cin>>g[i][j];
          for(int i=1;i<=n;i++)
              for(int j=1;j<=m;j++)
                  if (g[i][j]=='#')
                      check(i,j);
          int num=min(n,m);
          for(int i=1;i<=num;i++)
              cout<<mp[i]<< ' ';
      }
      
  • D:AABCC

    • 题意:

      在小于\(n\)的所有正整数中有几个能够表示为\(a^2\times b \times c^2\)\(a,b,c\)均为质数

    • 思路:

      大力出奇迹,直接筛出来所有小于1e6的质数然后暴力相乘判断即可通过此题

    • 代码:

      天依又给了你一份神秘代码$qwq$
      #include<bits/stdc++.h>
      #define int long long
      using namespace std;
      inline int read(){
          int f=1,b=0;char ch=getchar();
          while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
          while(ch>='0'&&ch<='9'){b=(b<<3)+(b<<1)+ch-'0';ch=getchar();}
          return f*b;
      }
      const int N=1e6+10;
      int n,num=0;
      bool f[N];
      int p[N];
      signed main() {
          n=read();
          int idx=0;
          for(int i=2;i<=N;i++){
              if(!f[i]) p[num++]=i;
              for (int j=0;p[j]*i<=N;j++) {
                  f[i*p[j]]=true;
                  if(i%p[j]==0) break;
              }
          }
          for(int i=0;i<num-2;i++) {
              int maxn=0,a=p[i]*p[i]*p[i]*p[i]*p[i];
              if(a>n) break;
              for(int j=i+1;j<num-1;j++) {
                  int b=p[i]*p[i]*p[j]*p[j]*p[j];
                  if(b>n) break;
                  for(int k=j+1;k<num;k++) {
                      int c=p[k]*p[k]*p[j]*p[i]*p[i];
                      if(c<=n)
                          idx++;
                      else 
                          break;
                  }
              }
          }
          cout<<idx<<'\n';
      }
      
    • E:

      有机会再写

    • F:

      有机会再写

板子复习

这次考试好像考不到啥抽象的东西,范围估计就是线段树,单调队列,单调栈,树状数组,LCA,tarjan之类的,因为我忘了tarjan所以我钦定tarjan不考

不过我感觉我LCA那里会比较薄弱毕竟我LCA全是拿树剖打的,但是我树剖没背过,赶紧临阵磨枪一下

struct node{
    int fa,dep,siz,son,top;
    int dfn,rnk;
}T[MAXM];
inline void Dfs1(int q){
    T[q].son=-1;
    T[q].siz=1;
    for(int j=head[q];j;j=NEXT[j]){
        if(T[TO[j]].dep) continue;
        T[TO[j]].dep=T[q].dep+1;
        T[TO[j]].fa=q;
        Dfs1(TO[j]);
        T[q].siz+=T[TO[j]].siz;
        if((T[q].son==-1) || (T[TO[j]].siz>T[T[q].son].siz)) T[q].son=TO[j];
    }
}
inline void Dfs2(int q,int v){
    T[q].top=v;
    T[q].dfn=++cnt;
    T[cnt].rnk=q;
    if(T[q].son==-1)
        return;
    Dfs2(T[q].son,v);
    for(int j=head[q];j;j=NEXT[j]){
        if((TO[j]!=T[q].fa)&&(TO[j]!=T[q].son))
            Dfs2(TO[j],TO[j]);
    }
}
inline void TreeAdd(int x,int y,int val){
    while(T[x].top!=T[y].top){
        if(T[T[x].top].dep<T[T[y].top].dep) 
            std::swap(x,y);
        ST::change(1,T[T[x].top].dfn,T[x].dfn,val);
        x=T[T[x].top].fa;
    }
    if(T[x].dep>T[y].dep) 
        std::swap(x,y);
    ST::change(1,T[x].dfn,T[y].dfn,val);
}
inline int TreeSum(int x,int y){
    int ans=0;
    while(T[x].top!=T[y].top){
        if(T[T[x].top].dep<T[T[y].top].dep) std::swap(x,y);
        ans=ans+ST::asksum(1,T[T[x].top].dfn,T[x].dfn);
        x=T[T[x].top].fa;
    }
    if(T[x].dep>T[y].dep) std::swap(x,y);
    return ans+ST::asksum(1,T[x].dfn,T[y].dfn);
}
inline void AddTree(int x,int val){
    ST::change(1,T[x].dfn,T[x].dfn+T[x].siz-1,val);
}
inline int AskTree(int x){
    return ST::asksum(1,T[x].dfn,T[x].dfn+T[x].siz-1);
}

你说得对,但是这是我B站头像

你说得对,但是这其实是数字藏品,需要抽满6个不同的数字藏品卡才能集齐,抽一次是9.9人民币,好贵啊好贵啊好贵啊好贵啊好贵啊好贵啊好贵啊好贵啊好贵啊好贵啊好贵啊,甚至我还出了好两个相同的??????????

你说得对,但是其实抽这个会一些表情包