2020 11 25 考試總結

2022-05-01 19:24:07 字數 3606 閱讀 9779

考得很炸,不是掛分太多了,主要是自己沒想到,但是似乎不掛分排名還是比較好看的???

水得一批,懶得講。

題目傳送門

胡確實是很好胡,但是具體實現上面需要一定的技巧。於是借鑑了rainybunny的code

不難看出,如果沒有修改操作,那麼肯定是每 \(n\) 個數為乙個迴圈段,每乙個迴圈段某乙個數與開頭兩個數相對關係確定。這個玩意就可以用矩陣進行優化。

考慮有修改,不難看出就是改了乙個矩陣,具體來說可以直接拆開考慮。不過麻煩的地方就是如何考慮相鄰的兩處修改,其實你可以記錄一下當前已經考慮了前面的多少位,通過判斷當前位與修改點的關係判斷這個矩陣是否被考慮到即可。具體可以見**。

#include using namespace std;

#define int register int

#define int long long

#define maxn 50005

template inline void read (t &t)while (c >= '0' && c <= '9') t *= f;}

template inline void read (t &t,args&... args)

template inline void write (t x)if (x > 9) write (x / 10);putchar (x % 10 + '0');}

int n,m,k,lg,mod,s[maxn];

int mul (int a,int b)

int dec (int a,int b)

int add (int a,int b)

struct matrix

matrix (int _a,int _b,int _c,int _d)

matrix operator * (const matrix &p)const

}st[maxn][65],tmp,ans;

void init ()

void getit (int& cur,int goal)

#define pii pairpii sk[maxn];

signed main()

sort (sk + 1,sk + m + 1),ans.c = 1;int cur = 0;

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

getit (cur,k);

write (cur < k ? ans.c : ans.a),putchar ('\n');

return 0;

}

題目傳送門

原題做不出系列。。。

首先考慮 50 pts做法(我才不會告訴你我寫的 \(nmk\log n\) 結果只有 10 pts),我們不難看出可以設 \(f_\) 表示以 \((i,j)\) 為底部的最大正方形邊長,可以得到轉移式:

\[f_=\min(f_,f_,f_)+1

\]考慮 100 pts,不難看出正著做不好做,於是我們可以倒著做。於是要求的就是刪除乙個位置,包含這個位置的最大正方形邊長。

這個比較好搞,我們可以用並查集維護一下空位,然後用單調性就可以做到 \(\theta(nm)\)。(假設並查集是線性的。)

#includeusing namespace std;

const int maxn = 2e3 + 10;

int n,m,k;

int ans;

int dp[maxn][maxn];

int l1[maxn];

int r1[maxn];

int qx[maxn];

int qy[maxn];

int ans[maxn];

char map[maxn][maxn];

struct node

}l[maxn],r[maxn];

void delete(int x,int y)

int main()

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

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

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

if(map[i][j] == '.')

delete(i, j);

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

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

if(map[i][j] == '.')

for (int j = k;j >= 1;-- j)

for(int i = qx[j] + 1; i <= n; i++)

for(int i = qx[j] - 1; i; i--)

for(int i = 1; i <= qx[j]; i++)

while(min(r1[i], r1[i + ans]) + min(l1[i], l1[i + ans]) - 1 > ans)

ans++;

} for(int i = 1; i <= k; i ++)

printf("%d\n",ans[i]);

return 0;

}

題目傳送門

不難看出 \(n^6\) 的高斯消元優化。

不難看出如果我們確定邊界上的期望值,那我們就可以確定每乙個點的 dp 值。於是拿這個解方程就可以做到 \(\theta(n^3)\) 了。

#include using namespace std;

#define hash screwyourwholefamily

#define double long double

#define int register int

#define get whysoserious

#define maxn 205

template inline void read (t &t)while (c >= '0' && c <= '9') t *= f;}

template inline void read (t &t,args&... args)

template inline void write (t x)if (x > 9) write (x / 10);putchar (x % 10 + '0');}

int n,m,x,y;

int hash (int x,int y)

struct nodeget[maxn][maxn];

double mat[maxn][maxn],f[maxn];

signed main()

int up = n + m - 1;

mat[0][0] = 1;

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

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

for (int i = 0;i < up;++ i)

} for (int i = up - 1;~i;-- i)

double ans = get[x][y].a[up];

for (int i = 0;i < up;++ i) ans += get[x][y].a[i] * f[i];

printf ("%.15lf\n",ans);

return 0;

}

2020 11 25 考試題解

題目描述 有一圈數,其數目為n個,定義一次操作為每個數變為原數圈中的自己與相鄰的兩個數這三個數的異或和,給出原陣列和操作次數,請算出最後的結果陣列。輸入資料 輸入第一行包含兩個正整數n和k,分別表示陣列數目和操作次數。第二行 n 個整數。輸出資料 僅包含一行n個整數。樣例輸入 3 1 1 2 3樣例...

2020 11 25 技術總結

將使用者所自己填寫或者爬蟲爬下來的日期資料轉化為dataframe中的日期格式。data1 日期 pd.to datetime data1 日期 將日期屬性進行排序 data1.sort values by 日期 inplace true 將日期屬性變為主要排序索引,然後可以利用loc進行以日期為單...

英語單詞 2020 11 25

英語 concise conform conservation constitute condemn confront consistent constitution condense congress console contaminate confer conscientious conspic...