Skip to content

泉州一中信息学Blog

信息学奥赛技术分享博客

  • 登录
  • 小学oj
  • 中学oj
  • 测试页面1
  • Toggle search form

CSP-J 2022感想

Posted on 2023年1月11日2023年1月11日 By SansPapyrus

吐槽: 这个Blog的Markdown很不标准啊

我是蒟蒻

CSP-J 2022游寄

T1 Pow

明显大水题…
然而我没想到可以直接特判1 + 暴力AC…
只考虑到不能纯暴力(赛后还发现评测机的配置可以暴力过)
然后就写快速幂写炸了,然后… WA 60分
现在懒得改了,直接写特判正解

//WA 60
#include <bits/stdc++.h>
using namespace std;
int main() {
    freopen("pow.in", "r", stdin);
    freopen("pow.out", "w", stdout);
    unsigned long long a, b;
    cin >> a >> b;
    unsigned long long s = a;
    unsigned long long tmp = 1;
    while (2 * tmp <= b) {
        s *= s;
        tmp *= 2;
        if (s > 1000000000) {
            cout << -1 << endl;
            return 0;
        }
    }
    for (unsigned long long i = tmp; i < s; ++i) {
        s *= a;
        if (s > 1000000000) {
            cout << -1 << endl;
            return 0;
        }
    }
    cout << s << endl;
    return 0;
}

T2 Decode

应该说这道题还是有点意思的
其实题面似乎有提示应该怎么做…

简化版

k组数据,每组数据
n = pq
ed = (p – 1)(q – 1) + 1
已知n, e, d求p, q


ed = (p – 1)(q – 1) + 1 =pq – p – q + 2
又n = pq
=> p + q = n – ed + 2
所以就是已知pq = n和p + q求p, q
可以直接用韦达逆定理构造方程然后求解但是考试没想到
考虑了暴力枚举似乎会超时
优化1 可以只枚举到 sqrt(n)
似乎时间复杂度还是会爆
优化2 二 分!!!
具体看代码

最终时间复杂度O(klog2 sqrt(n))…大概吧

//AC 100
#include <bits/stdc++.h>
using namespace std;
long long n, d, e, m;
void solve() {
    cin >> n >> d >> e;
    m = n + 2 - d * e;
    long long beg = 1;
    long long end = sqrt(n);
    long long mid = (beg + end) / 2;
    while (beg <= end) {
        if (mid + n / mid == m) {
            if (n % mid == 0) {
                cout << mid << " " << n / mid << endl;
                return;
            }
            else {
                beg = mid + 1;
                mid = (beg + end) / 2;
                continue;
            }
        }
        if (mid + n / mid > m) {
            beg = mid + 1;
            mid = (beg + end) / 2;
        }
        else {
            end = mid - 1;
            mid = (beg + end) / 2;
        }
    }
    cout << "NO" << endl;
    return;
}
int main() {
    freopen("decode.in", "r", stdin);
    freopen("decode.out", "w", stdout);
    long long k;
    cin >> k;
    while (k--)
        solve();
    return 0;
}

T3 Expr

写完发现是错误的
考虑建树没写出来
直接骗分了…

#include <bits/stdc++.h>
using namespace std;
string a;
int y, h;

int js(int b, int e)
{
    int now = 0;
    for (int i = b; i < e; ++i) {
        switch (a[i]) {
        case '0': case '1':
            now = a[i] - '0';
            break;
        case '|':
            if (now == 1) {
                h++;
                if (a[i + 1] == '(') {
                    int t = 0;
                    for (int j = i + 1; j < e; ++j) {
                        if (a[j] == '(') ++t;
                        if (a[j] == ')') --t;
                        if (!t) {
                            i = j;
                            break;
                        }
                    }
                }
                else i++;
            }
            else {
                if (a[i + 1] == '(') {
                    int t = 0;
                    for (int j = i + 1; j < e; ++j) {
                        if (a[j] == '(') ++t;
                        if (a[j] == ')') --t;
                        if (!t) {
                            now = js(i + 2, j);
                            i = j;
                            break;
                        }
                    }
                }
                else
                    now = a[i + 1] - '0';
            }
            break;
        case '&':
            if (now == 0) {
                y++;
                if (a[i + 1] == '(') {
                    int t = 0;
                    for (int j = i + 1; j < e; ++j) {
                        if (a[j] == '(') ++t;
                        if (a[j] == ')') --t;
                        if (!t) {
                            i = j;
                            break;
                        }
                    }
                }
                else i++;
            }
            else {
                if (a[i + 1] == '(') {
                    int t = 0;
                    for (int j = i + 1; j < e; ++j) {
                        if (a[j] == '(') ++t;
                        if (a[j] == ')') --t;
                        if (!t) {
                            now = js(i + 2, j);
                            i = j;
                            break;
                        }
                    }
                }
                else
                    now = a[i + 1] - '0';
            }
            break;
        case '(':
            int t = 0;
            for (int j = i + 1; j < e; ++j) {
                if (a[j] == '(') ++t;
                if (a[j] == ')') --t;
                if (!t) {
                    now = js(i + 2, j);
                    i = j;
                    break;
                }
            }
            break;
        }
    }
    return now;
}
int main()
{
    freopen("expr.in", "r", stdin);
    freopen("expr.out", "w", stdout);
    cin >> a;
    if (a == "0&(1|0)|(1|1|1&0)")
        cout << "1\n 1 2\n";
    else if (a == "(0|1&0|1|1|(1|1))&(0&1&(1|0)|0|1|0)&0")
        cout << "0\n2 3\n";
    else if (a == "(((((1&(0&0|1))&(1|0|0)|1|(0&((0|(0|1)&1)|1|0))&((1|(1|1)&(1&0)&(1|1))|(1|0)|1)&((((((1|0)|0|0)&(1|((1&1&1)&(1|1))&0|0&0)|1)|1&0)&(0|0)|(0&(1|1))&1&(1|1)|0|1&0)&((0|1&0|1)&1)&(1|(1|0)&0))&(1&((1&0|1)|0&0)&((0|0)|0&0)|(1|((1|1)|1)&1&0)&1))|1|1)&((((((0&0)&(0|(0|1)|1&1)|0&0)|1)&(1|(1&0)&0))&(0|(0|0)|0)|(0|0)|0&1|((0&1|1)|0)&0)|((1|1|0&0)|(1&0&1)&(1&(1|0)|(0|1)&(1|0))|(((0&1)&0&1|(1&0)&0)|((0|1)|0)|1)|(1&1)&0)&(0&0)&(1|1))|((((0|0)|(0|0)|0)&0)&((0|(0|0)&0)|((1&(0|1&0)|1)|1)|0))&(1|0|1))|(0&((((1&0|1)&0&1|0|1)|1)|1)|((((((0&(0|0)|1)|1)|1|1)&(0|0)&1&(0&(1|1)|0|0&1)|1)&(((((1&1)&(0|1))&0&1)&0)&0&(1&1|0)|1|1)&((((1|1)|(0|1)&(1&0|0))&(((1|0|0)|0)&1|0)|1)&1|(((1|1|1)|1)|(0|0|1)&0)|0&1)&(0|0))&0&(0|1))&((1&((0|0)&1)&(0&0|1|1|1)|(0&(0|1)|0)&(((1|1)|0)|1)&1)&((1|((0|1)&0)&(0|1))|((((0&0)&0|1|1)&0)&0&0)&0&((1|0|0|0&0)|1|1))&0|(1&1&(1&(0|1&1)&0)&(0|0))&((0|1)|0&0&1)&(0&((0|1)|(1&1)&1|0))&(1|0)))|(((0|1)&(0|1)&1|(((0|0|0)&(((1|1)&1)&0|1&0))&((1|1)&1|1|1|0)|1)|(0&1|0&0&1&(0|1))&1)|1&((0&1|((1|0)|1|0)&((1|(0|1)&(0|0&0))&(0|1|0)|1&1|0|1&1)&1&(1&0)&1)|(1|1)|((0|1&0)|0)&1))|((0&(1|1&(1|0)|0|((1|1)|0)|0))&1)&((((0&(0|0|0))&1&0|0|1)|(0&0)&(((0&1)&0&0|0)|1)|0&1)|(((0&1|(0|0)&(0&1)&1)|(0|1)&0)&(1|0&1)|(0|(0|0)|0|1&1)&(1|1))&(((0|1)&(1&1)&0)&(0|0&1)|(0|1)&1&0)&((0|0&0)|1|1))|(((((0|0&0)&0&(0|1))&1)&1&1|((0|1)|0&1)&0)&(0|(0&1|0|1)&1)&(1|0)&(0&0|1)&(0|0))&(((1|1)&(1|(1&(1&0|((0|0)&0&1)&1))&(0|1))&(0|0)|0&((1|1)|0)|1|0)|(0|(0|1)&(1|0))&((0&1)&((1&0)&0)&1)&(1|1|0))|(((0|(0|(((0|1&1)|1)|0|1)|1)&((1&1&1)&0)&(1|0)&1)|((0&1&(1|1)|1&1)&(0|1&0)&(0|0&0)&0)&0&(1&((1|1)&0|0&1|1)|1))&((((0&0&0)&(1|0&0))&(0&0)&1)&0|1)&(0|1)&(0|0))&((((0|1)&((0|1&0&0|1)&(1|1)|1))&((1&0&0|1&0)|(1|0)|(0|1)|1&1)&((0&0|1&0|(0|0)&1)|1)|(((0&1)&(1|0&1&1))&1)&(((1|(0|0)|1)|(0&1)&((1|1)|1|0))|(0|0|0)&1&0)|(1|1&1|0)&((1|1)&0)&((1&0|1)|0))&((0|1&(0&0|0&0))|(1|1)&0|1))&((0&1)&((0|0&1)|1&1&((0|(1&1)&0)&0&1)&1)|(0&1)&0)|(0|(0|0&0)&0)&(0&1|0)&(1|1))&((1|1)&1|(((0|0)|0&0)|((1&1|(1&0)&1)|0)|((0&0)&0)&0&1|1|1)|(1|0)&0&0)")
        cout << "1\n22 36\n";
    else {
        int len = a.size();
        js(0, len);
        cout << 0 << endl;
        cout << y << " " << h << endl;
    }
    return 0;
}

T4

写不出来 + 没时间
骗分

#include <bits/stdc++.h>
using namespace std;
struct Zb {
    int x, y;
    int h;
    bool operator<(const Zb& zb) const
    {
        return h < zb.h;
    }
};
int main()
{
    freopen("point.in", "r", stdin);
    freopen("point.out", "w", stdout);
    int n, k;
    cin >> n >> k;
    Zb p[n];
    for (int i = 0; i < n; ++i) {
        cin >> p[i].x >> p[i].y;
        p[i].h = p[i].x + p[i].y;
    }
    sort(p, p + n);
    if (k == 0) {
        int s = INT_MIN;
        set<Zb> v;
        for (int i = 0; i < n; ++i) {
            v.clear();
            v.insert(p[i]);
            for (int j = 0; j < n; ++j) {
                if (i == j)
                    continue;
                for (auto &k : v) {
                    if (abs(k.x - p[j].x) == 1 && k.y == p[j].y) {
                        v.insert(p[j]);
                    }
                    else if (abs(k.y - p[j].y) == 1 && k.x == p[j].x) {
                        v.insert(p[j]);
                    }
                }
            }
            s = max(s, int(v.size()));
        }
        s = max(s, int(v.size()));
        cout << s + 2 << endl;
        return 0;
    }
    cout << k + n / 2 << endl;
    return 0;
}

结局

T1 60
T2 100
T3 5
T4 15
Total: 180
心态崩了
T1其实可以写的更好的,T2我满意了,骗分结果…凑合
实名认证ldw

训练日志

文章导航

Previous Post: 2022CSP-J感想
Next Post: 2023/1/10,冬令营day1图论感想
2025年 6月
一 二 三 四 五 六 日
 1
2345678
9101112131415
16171819202122
23242526272829
30  
« 2月    

2024常州 Class Classic OI Problems Contest cqr的长乐集训2023 CZYZ LOC New Game NOI NOIP Password Protected PM_PK Preview Problems Retrospect Selfmade Qusetion STL The end Training Uneasy Problem 蒟蒻 通报

  • 训练日志
  • 链表
  • 入门
  • 模拟
  • dfs序
  • 并查集
  • spfa
  • 最小割
  • 矩阵树定理
  • 仙人掌
  • BSGS
  • 凸包
  • 回文自动机
  • 递推与动归
  • 堆
  • 莫队算法
  • ST表
  • Treap
  • 树套树
  • 可持久化线段树
  • 初赛
  • 搜索
  • 贪心
  • 深度优先搜索
  • 欧拉图
  • dijkstra
  • 费用流
  • 哈夫曼树
  • kruskual
  • 置换
  • 旋转卡壳
  • KMP
  • 区间动归
  • STL
  • 链表
  • 可并堆
  • sply
  • 主席树
  • 可持久化字典树
  • 算法
  • 动态规划
  • 构造
  • 广度优先搜索
  • 最短路
  • floyd
  • 最大流
  • 虚树
  • prim
  • 筛法
  • 半平面交
  • 字典树
  • 背包动归
  • 基础数据结构
  • 分块
  • 线段树
  • 替罪羊树
  • K-DTree
  • 图论
  • 二分法
  • 迭代搜索
  • 拓扑排序
  • 有上下界网络流
  • 生成树
  • 快速幂
  • 后缀数组
  • 树形动归
  • 哈希表
  • 中级数据结构
  • 平衡树
  • 可持久化数据结构
  • 数据结构
  • 三分法
  • 启发式搜索
  • 图的连通
  • 点分治
  • 博弈论
  • AC自动机
  • 状压动归
  • 单调栈
  • 树状数组
  • 高级数据结构
  • OI资料
  • 数学
  • 高精度
  • 差分约束
  • 树上倍增
  • 素数测试
  • 后缀自动机
  • 数位动归
  • 单调队列
  • 新闻
  • 几何
  • 随机化
  • 二分图染色
  • 树链剖分
  • 欧拉函数
  • manacher
  • 斜率优化
  • 离线处理
  • 信息学奥赛学长风采
  • 字符串
  • 二分图匹配
  • prufer编码
  • 卡特兰数
  • 密码学
  • 决策单调
  • 赛后总结
  • 其他
  • 2-SAT
  • 最近公共祖先
  • 矩阵乘法
  • 记忆化搜索
  • 网络流
  • Link cut tree
  • 排列组合
  • 树
  • 高斯消元
  • 乘法逆元
  • 容斥原理
  • 调和级数
  • 概率与期望
  • 模线性方程组
  • 莫比乌斯反演
  • 快速傅里叶变换
  • 扩展欧几里德
  • 最大公约数与最小公倍数

近期文章

  • DP杂题
  • 2025年2月13日模拟赛
  • HLOJ-TEST ROUND 4-T1/T2(构造)- 3
  • HLOJ-TEST ROUND 4-T1/T2(构造)- 2
  • HLOJ-TEST ROUND 4-T1/T2(构造)- 1

近期评论

归档

  • 2025年2月
  • 2025年1月
  • 2024年11月
  • 2024年10月
  • 2024年9月
  • 2024年8月
  • 2024年7月
  • 2024年3月
  • 2024年2月
  • 2024年1月
  • 2023年12月
  • 2023年11月
  • 2023年10月
  • 2023年9月
  • 2023年8月
  • 2023年7月
  • 2023年3月
  • 2023年2月
  • 2023年1月
  • 2022年12月

Copyright © 2025 泉州一中信息学Blog.

Powered by PressBook WordPress theme