期望得分:100+0+100=200

实际得分:100+5+100=205

 

T1

NOIP模拟赛13

 

空间卡到30M。。

n<=2.5*1e7

若x是整除区间[1,n]每个数的最小的数,那么对[1,n]每个数分解质因数,

ai=2^x*3^y*5^z……

x=2^max(x) * 3^max(y) * 5^max(z) * ……

max(x)=floor (logx n)

只有5000以内的素数的指数才会>=2,所以500之后的素数打个表

代码13M,不传了 

 

T2 bzoj 1567  Blue Mary的战役地图

正解二维哈希,但是严重不满n^7枚举可过

考试的时候zz的把return0 写成break,gg

#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
inline void read (int &x)
{
    x=0; char c=getchar();
    while(!isdigit(c)) c=getchar();
    while(isdigit(c)) { x=x*10+c-'0'; c=getchar(); }
}
int a[51][51],b[51][51];
int main()
{
    int n;
    read(n);
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
            read(a[i][j]);
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
            read(b[i][j]);
    int x2a,y2a,x2b,y2b;
    bool ok; int ans=0;
    for(int len=n;len;len--)
        for(int xa=1;xa+len-1<=n;xa++)
            for(int ya=1;ya+len-1<=n;ya++)
                for(int xb=1;xb+len-1<=n;xb++)
                    for(int yb=1;yb+len-1<=n;yb++)
                        if(a[xa][ya]==b[xb][yb])
                        {
                            ok=true;
                            for(int x=1;x<=len&&ok;x++)
                                for(int y=1;y<=len&&ok;y++)
                                    if(a[xa+x-1][ya+y-1]!=b[xb+x-1][yb+y-1]) ok=false;
                            if(ok) { ans=len;printf("%d",ans);return 0;}
                        }
}
View Code

相关文章:

  • 2022-01-10
  • 2021-12-06
  • 2022-02-02
  • 2021-11-27
  • 2021-11-08
  • 2021-10-11
  • 2021-08-09
  • 2021-08-22
猜你喜欢
  • 2022-12-23
  • 2022-01-18
  • 2021-10-24
  • 2021-12-12
  • 2021-10-05
  • 2021-10-02
  • 2021-11-11
相关资源
相似解决方案