window.cnblogsConfig = {//可以放多张照片,应该是在每一个博文上面的图片,如果是多张的话,那么就随机换的。 homeTopImg: [ "https://cdn.luogu.com.cn/upload/image_hosting/xkzro04i.png" ], }

CSP-J 2023 赛前模拟赛 Day 5 比赛复盘

CSP-J 2023 赛前模拟赛 Day 5 比赛复盘

分数:$100+0+0+20=120$

前言:

这次模拟赛考的不理想,虽然只考了 $1$ 个小时就去香港办证了,但是第二题也是有可能拿到全分。预计的分数是 $100+(40\sim70)+(10\sim40)+20=(170\sim230)$,但是第二题和第三题爆零了。

分析:

T1:

第一题是一道十分简单的模拟题 有脚就能做,很快就 AC 了。

AC Code

#include <cstdio>
#include <list>
#include <algorithm>
using namespace std;
int a[103], n, k;
inline bool check()
{
for(int i = 1; i <= n; ++i)
if(a[i] < k)
return true;
return false;
}
int main()
{
scanf("%d%d", &n, &k);
for(int i = 1; i <= n; ++i)
scanf("%d", &a[i]);
sort(a + 1, a + n + 1);
int ans = 0;
while(check())
{
list<int> l;
bool flag = false;
for(int i = 1; i <= n; ++i)
if(a[i] != a[i - 1] && a[i] < k)
{
l.push_back(i);
flag = true;
}
if(flag)
{
++ans;
for(const auto &p: l)
++a[p];
sort(a + 1, a + n + 1);
}
}
printf("%d", ans);
return 0;
}

T2:

第二题是一道数学题,具体思路是记录最小的大于 $0$ 的奇数和最大的大于 $0$ 的奇数,然后选择所有大于 $0$ 的数加起来,判断和是否是奇数,如果不是,则将其设为减去最小项与减去最大项的较大值,输出。这道题赛时写了一段 $O(n^2)$ 的递推,还写错了。

AC Code

#include <cstdio>
#include <climits>
#include <algorithm>
using namespace std;
int a[100003];
int main()
{
int T;
scanf("%d", &T);
for(int n, L, R, ans; T--; )
{
scanf("%d", &n);
L = INT_MAX;
R = INT_MIN;
ans = 0;
for(int i = 1; i <= n; ++i)
{
scanf("%d", &a[i]);
if(a[i] > 0)
{
if(abs(a[i] % 2))
L = min(L, a[i]);
ans += a[i];
}
if(a[i] < 0 && abs(a[i]) % 2)
R = max(R, a[i]);
}
if(!(ans % 2))
ans = max(ans - L, ans + R);
printf("%d\n", ans);
}
return 0;
}

T3:

第三题暂时还没有想出来。赛时写了一段回溯代码想暴力拿部分分,但是爆零了,初步排查是 DFS 写错了。

AC Code

(暂无)

赛时 Code

#include <cstdio>
using namespace std;
using LL = long long;
const int MOD = 1e9 + 7;
int n;
LL a[200003], k, ans = 0;
inline LL pow(const int &base, int exp)
{
LL ret = 1;
while(exp--)
ret *= base;
return ret;
}
void dfs(const int &p)
{
if(p >= n)
{
LL ck1 = a[1], ck2 = a[1];
for(int i = 2; i <= n; ++i)
{
ck1 &= a[i];
ck2 ^= a[i];
}
if(ck1 >= ck2)
ans = (ans + 1) % MOD;
return;
}
for(LL i = 0; i < k; ++i)
{
a[p + 1] = i;
dfs(p + 1);
}
}
int main()
{
int T;
scanf("%d", &T);
while(T--)
{
scanf("%d%lld", &n, &k);
k = pow(2, k);
dfs(0);
printf("%lld\n", ans % MOD);
ans = 0;
}
return 0;
}

T4:

第四题也暂时没有思路。赛时是用四重循环枚举判断,时间复杂度 $O(n^4)$,可以拿 $20$ 分。

AC Code

(暂无)

赛时 Code

#include <cstdio>
#include <set>
using namespace std;
set<int> G[3003];
int main()
{
int n, m, ans = 0;
scanf("%d%d", &n, &m);
while(m--)
{
int a, b;
scanf("%d%d", &a, &b);
G[a].insert(b);
}
for(int i = 1; i <= n; ++i)
for(int j = 1; j <= n; ++j)
for(int k = 1; k <= n; ++k)
for(int l = 1; l <= n; ++l)
if(i != j && j != k && k != l && l != i && G[i].find(j) != G[i].cend() && G[i].find(k) != G[i].cend() && G[j].find(l) != G[j].cend() && G[k].find(l) != G[k].cend())
++ans;
printf("%d", ans / 2);
return 0;
}

总结:

这场比赛总体不理想,第二题和第三题更是爆零了。下次努力!

签名:

$\text{TigerTan}$

日期:

$2023.10.06$


__EOF__

本文作者TigerTanWQY
本文链接https://www.cnblogs.com/TigerTanWQY/p/17988120.html
关于博主:GD-SZ 初一蒟蒻,明年拿下六级勾
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   TigerTanWQY  阅读(62)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示