更好的阅读体验:http://www.abmcar.top/archives/nyist20-ji-pai-wei-sai-di-yi-chang-fu-pan
A - A CodeForces 1574C
大致分2种情况 分类讨论即可
- 选最大的小于龙防御的勇士打龙,其他人守城
- 选最小的大于龙防御的勇士大龙,其他人守城
因为sb的greater()和lower_bound(),upper_bound()贡献了5次wa
C - C CodeForces - 1406B
取正数里的最大最小和负数里的最大最小直接暴力算即可
利用优先队列取二者的最大最小
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OPpndSl3-1633159026756)(/upload/2021/10/image-7271cf8e27b4475eb90afbee125b871b.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Pr3ekcg9-1633159026758)(/upload/2021/10/image-0399bb5850654f2bace0d99fafa8e2e1.png)]
我期待的Q1234
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Fnco6ofj-1633159026759)(/upload/2021/10/image-cc09726fc0964a58808ff39d62a7c278.png)]
实际的Q1234
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-o9Xz96RV-1633159026761)(/upload/2021/10/image-cafef9ffe871480782ffd6f6fde23acb.png)]
正数中的最大和负数中的最小的顺序反了
需要额外
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fVXJHKSA-1633159026762)(/upload/2021/10/image-3b38507b6d36456899717caa78098d2d.png)]
I - I POJ - 1088
经典老题,写过好多遍,dfs记忆化即可
好的接下来我们来查错
int work(int nowX, int nowY, int nowD)
{
tot++;
if (preAns[nowX][nowY] != 0)
return nowD - 1 + preAns[nowX][nowY];
int nowMax = nowD;
for (int i = 0; i < 4; i++)
{
int nx = nowX + nextX[i];
int ny = nowY + nextY[i];
if (nx > n || ny > m || nx < 1 || ny < 1)
continue;
if (vis[nx][ny])
continue;
if (board[nx][ny] > board[nowX][nowY])
continue;
vis[nx][ny] = true;
nowMax = max(nowMax, work(nx, ny, nowD + 1));
vis[nx][ny] = false;
}
preAns[nowX][nowY] = max(preAns[nowX][nowY], nowMax - nowD + 1);
return nowMax;
}
图中preAns为记忆的之后能走的最大长度
在经历了5发T,4发Wa后回过头来看,发现上图代码滑雪能平地滑
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xOvT7t2U-1633159026763)(/upload/2021/10/U_XZ%7BX9JF4%25M9EY_FPUWWL4-191372583b4a429c95f980b309bf6b9b.jpg)]
G - G AtCoder - abc177_e
已知质数gcd结果为1,可以先算出全部的gcd,非1则直接not coprime
接下来再判互质
不知道怎么想出来的互质:
一个数不是另一个数的因子
for (ll i = 0; i < n; i++)
{
ll temp = N[i];
ll nowNum = N[i] * 2;
if (N[i] == 1)
continue;
while (nowNum <= 1e6)
{
if (M[nowNum] >= 1)
{
cout << "setwise coprime" << endl;
return 0;
}
nowNum += temp;
}
}
实际的互质:
不能有共同的因子
for (int i = 0; i < primes.size(); i++)
{
int nowCnt = 0;
for (int j = 1; j*primes[i] <= 1e6; j++)
nowCnt = nowCnt + M[j*primes[i]];
if (nowCnt > 1)
{
cout << "setwise coprime" << endl;
return 0;
}
}
待更新