2023年11月1日普及組模擬賽 解題報告

2021-08-17 13:56:54 字數 4156 閱讀 2455

給定乙個長和寬都小於等於100的矩陣,求出矩陣邊緣的和

暴力模擬

#include

using

namespace

std;

int a,n,m,i,j;

long

long s;

int main()

if (i==1||j==1||i==n||j==m) s+=a;}//直接判斷

printf("%lld",s);//輸出

return

0;}

給定乙個n×

m n×m

的矩陣a,對其進行q 次詢問:以(x1; y1) 為左上角,(x2; y2) 為右下角的子矩

陣中,所有元素的最大值。

暴力模擬

#include

#include

#define input read()

using

namespace

std;

int a[101][101];

int x1,y1,x2,y2,maxx;

int n,m,q;

int read()//輸入流不解釋

int main()

return

0;}

給定k 種移動方式:從(i; j) 移動到(i + xk; j + yk)(xk; yk > 0)。詢問在乙個n m 的矩陣中,

從(1; 1) 出發,可以到達多少個位置。

n<=

m<=

100,

k<=

10 n

<=

m<=

100,

k<=

10資料很弱,直接dfs,但是其實bfs會更快

#include

#define input read()

#define xh for (int i=1;i<=k;i++)

using

namespace

std;

int n,m,k;

int l=0;

bool b[101][101]=;

int x1[21],y1[21];

int ans=1;

int lx[11],lx2[11];

int read()//輸入流

void dfs(int x,int y,int dep)//dfs

}int main()

dfs(1,1,1);//深搜

printf("%d",ans);

return

0;}

#include 

using

namespace

std;

bool f[101][101]; int x,y,n,m,k,ans;

int main()

for (int i=1;i<=n;i++)

for (int j=1;j<=m;j++)

if (f[i][j]) ans++;//統計

printf("%d",ans);//輸出

return

0;}

在乙個n m 的矩陣a 的所有位置中分別填入0 或1,要求填入的數必須滿足ai;j ai;j+1 且

ai;j ai+1;j。詢問一共有多少種不同的矩陣,並將答案對1000000007 取模。

一波深搜找規律,發現是楊輝三角,直接過去。

但因為有對1000000007取餘,而1000000007是乙個質數,根據費馬小定理也可以加上快速冪求解

#include

#define input read()

#define p 1000000007

#define inf 2147483647

using

namespace

std;

int n,m;

long

long ans;

int b[601][601];

int read()

bool pd()

return

false;

}void dfs(int x,int y)

b[x][y]=1;

dfs(y==m? x+1:x,y==m? 1:y+1);

b[x][y]=0;

dfs(y==m? x+1:x,y==m? 1:y+1);

b[x][y]=inf;

}int main()

dfs(1,1);

printf("%d",(ans)%p);

}

#include

#define input read()

#define p 1000000007

#define inf 2147483647

using namespace std;

int a[2][5001];

int n,m,i;

void swap(int &o,int &k)

intread()

int main()

if (j==1)

a[x][j]=(a[y][j]+a[x][j-1])%p;

}printf("%d",a[x][m]);

return

0;}

#include 

using

namespace

std;

const

unsigned

long

long p=1000000007;

int n,m,i;

void swap(int &a,int &b)

unsigned

long

long s=1;

unsigned

long

long ksm(unsigned

long

long x,unsigned

long

long y)

return result;

}int main()

對矩陣進行一堆操作,然後要求支援還原歷史版本

「我會主席樹」「滾!」

「我會rope」「滾!」

「我會可持久化棧」「滾」

其實這道題並不需要用什麼可持久化資料結構,可以對答案建一顆搜尋樹,由於資料較弱,我們可以直接通過樹直接還原

#include

#include

using

namespace

std;

int read()

void write(int x)

void writeln(int x)

int n,m,q,k;

struct node

e[100002];

int x[100002],y[100002],p[100002],opt[100002],ans[100002];

int f[1001][1001];

void swap(int &o,int &k)

bool cmp(node x,node y)

if (opt[t]==2)

for (i=1;i<=m;i++)

if (opt[t]==3)

for (i=1;i<=n;i++)

ans[t]=k;

for (i=p[t];i1];i++) solve(e[i].b);

if (opt[t]==1)

else

if (opt[t]==2)

for (i=1;i<=m;i++)

else

if (opt[t]==3)

for (i=1;i<=n;i++)

}int main()

sort(e+1,e+1+q,cmp);e[0].a=-1;e[q+1].a=q+1;

for (int i=1;i<=q+1;i++)

for (int j=e[i-1].a+1;j<=e[i].a;j++) p[j]=i;

solve(0);

for (int i=1;i<=q;i++) writeln(ans[i]);

}

2017 年普及組初賽

長度為0的子串 1長度為9的 9 故,答案 1 9 8 7 6 5 4 3 2 1 46 第 21 題 5 分 乙個人站在座標 0,0 處,面朝 x 軸正方向。第一輪,他向前走 1 單位距離,然後右轉 第二輪,他向前走 2 單位距離,然後右轉 第三輪,他向前走 3 單位距離,然後右轉 他一直這麼走下...

2023年11月9日訓練總結

這次訓練日記是11月6日到11月9號。總體來說,數字dp專題清掉了所有的水題。剩下的題暫時還沒想出怎麼做,而且我也只會遞迴這一種寫法。狀態轉移的寫法只會簡單的 cf打了一場比賽 慘,2題 昨晚打了一場比賽 較慘,3題 看了字典樹的模板,但是還未應用去a題。看樣子應該不太難。這幾天狀態不太好,一是因為...

2023年11月30日訓練總結

這次訓練總結是11月27日 11月30日。等待的狀壓dp專題終於開了。第一次看資料覺得它挺好玩,然而做題目的時候發現並不好做。特點 給的n,m至少有乙個比較小,或者狀態數比較少但不是特別少。經典的題目有放木塊 排兵布陣等。我見過的有兩種寫法,一種是用dfs來列舉狀態,另一種是直接for迴圈列舉每種狀...