Powered by:NEFU AB-IN

Link

文章目录

  • 4510. 寻宝!大冒险!
    • 题意
    • 思路
    • 代码

4510. 寻宝!大冒险!

  • 题意

    第26次CCF计算机软件能力认证

    题目略
    简短版:有一个LxL的大正方形和SxS的小正方形,大正方形中有部分打上1标记的点,SxS保证左下角一定是1,问在大正方形中能找到小正方形有多少种可能

  • 思路

    思路都是一样的,因为L太大了,不能对应到二维数组,所以还是枚举被标记的点,然后根据小正方形的各个点的偏移量和01情况,挨个进行对应即可
    但此题的时限开的比较小,会出现一些问题:

    • 我一开始想的是用Python的思维,用二维结构体当做key进行标记和遍历

      • 但unordered_map 没有针对pair的哈希函数,所以不能用unordered_map,得用map
      • 然而这么做,思路是对的,但是pair的存取耗时量太大,会导致TLE
    • 所以可以改成将二维转成一维,进行坐标的标记
      • 具体怎么转,可以取一个比1e9大的质数作为模数,类似于,x*N+y,这样的话需要开long long,就可以再用unordered_map了
      • x和y的原值可分别用,除余和取余操作得到
    • 另外,我们最后需要遍历哈希表,进行坐标读取,判断是否和小正方形的01条件对应
      • 但是如果这么写 f != st[fc(x, y)] st默认会开一个键值对,而且优先级大于你之前存的键值对,也就是说,在你auto进行遍历时,下一个会遍历这个键值对,这不是我们需要的
      • 所以应该这么写,f != (int)st.count(fc(x, y)) ,用count判断是否存在过,这样不会瞎开键值对
    • 另外,开臭氧优化,会快很多!
  • 代码

    /*
    * @Author: NEFU AB-IN
    * @Date: 2023-01-17 11:40:21
    * @FilePath: \Acwing\4510\4510.cpp
    * @LastEditTime: 2023-01-17 14:30:33
    */
    // #pragma GCC optimize(1)
    // #pragma GCC optimize(2)    //先开优化
    // #pragma GCC optimize(3, "Ofast", "inline")
    #include <bits/stdc++.h>
    using namespace std;
    #define int long long
    #undef int#define SZ(X) ((int)(X).size())
    #define ALL(X) (X).begin(), (X).end()
    #define IOS                                                                                                            \ios::sync_with_stdio(false);                                                                                       \cin.tie(nullptr);                                                                                                  \cout.tie(nullptr)
    #define DEBUG(X) cout << #X << ": " << X << '\n'
    typedef pair<int, int> PII;const int N = 1e9 + 7, INF = 0x3f3f3f3f;
    int n, L, S;struct sa
    {int x, y, f;
    };unordered_map<long long, int> st;
    vector<sa> rec;signed main()
    {auto fc = [&](int x, int y) { return 1LL * x * N + y; }; //转换函数scanf("%d%d%d", &n, &L, &S);for (int i = 1; i <= n; ++i){int x, y;scanf("%d%d", &x, &y);st[fc(x, y)] = 1;}for (int i = 0; i < S + 1; ++i){for (int j = 0; j < S + 1; ++j){int flag;scanf("%d", &flag);rec.push_back({S - i, j, flag}); // 更换坐标}}int ans = 0;for (auto &[t, _] : st){auto xs = t / N, ys = t % N;int flag = 1;for (auto &[xp, yp, f] : rec){int x = xs + xp;int y = ys + yp;if (x < 0 || x > L || y < 0 || y > L || f != (int)st.count(fc(x, y))){flag = 0;break;}}ans += flag;}printf("%d", ans);return 0;
    }
    

4510. 寻宝!大冒险!相关推荐

  1. CSP 202206 题解:归一化处理,寻宝大冒险,角色授权,光线追踪,PS无限版

    试题内容请前往CCF官网查看: CCF-CSP计算机软件能力认证考试 http://118.190.20.162/home.page 阅读本题解前,您应当了解下列知识: 线段树 教程 C++ 标准库( ...

  2. ccfcsp 202206-2 寻宝大冒险

    问题描述 就是这个题,输入与输出格式不再罗列,题目目的大概意思为:给定一个小的地图B,在一个大的地图A中找到B,也就是B是A的子图,求有几个这样的子图. ccf的第二题给定的限制时间和空间都很大,所以 ...

  3. 2022-6-2寻宝大冒险(不用前缀和与map,c/c++实测满分)

    总结: 离散点对应回稀疏矩阵时可以分块处理,根据限制条件筛选掉不必处理的块,缩短计算时间. 一.题目要求 题目背景 暑假要到了.可惜由于种种原因,小 P 原本的出游计划取消.失望的小 P 只能留在西西 ...

  4. ccf寻宝!大冒险!python满分(敲开心~)

    寻宝 大冒险 题目传送:http://118.190.20.162/view.page?gpid=T147 思路及代码: 核心点就是哈希. 之前刷的是70分,找不到之前的代码了,大概是建了一个很大的表 ...

  5. 【寒假每日一题】AcWing 4510. 寻宝!大冒险!

    目录 一.题目 1.原题链接 2.题目描述 二.解题报告 1.思路分析 2.时间复杂度 3.代码详解 一.题目 1.原题链接 4510. 寻宝!大冒险! - AcWing题库 2.题目描述 暑假要到了 ...

  6. CSP 寻宝!大冒险! C++

    CSP 寻宝!大冒险! C++ 思路:遍历绿化图的每个树,先判断藏宝图里树的数量和当前树的右上边长为s的正方形的树的数量是否一致,如果一致,再循环遍历判断是否相等. #include<bits/ ...

  7. ccf csp寻宝!大冒险!(C语言)

    ccf csp寻宝!大冒险! 题目背景 暑假要到了.可惜由于种种原因,小 P 原本的出游计划取消.失望的小 P 只能留在西西艾弗岛上度过一个略显单调的假期--直到-- 某天,小 P 获得了一张神秘的藏 ...

  8. ~1 ccf 2022-06-2 寻宝!大冒险!

    寻宝!大冒险! 题目描述 输入 输出 样例输入 样例输出 子任务 源代码 关于这题 题目描述 输入 输出 样例输入 样例一: 5 100 2 0 0 1 1 2 2 3 3 4 4 0 0 1 0 1 ...

  9. CCF- CSP 202206-2寻宝!大冒险!暴力算法满分题解

    CCF- CSP 202206-2寻宝!大冒险!暴力算法满分题解 题目链接:202206-2寻宝!大冒险! 思路: 数据范围中n ≤ \leq ≤ 1000,S ≤ \leq ≤ 50,考虑时间复杂度 ...

最新文章

  1. 谈谈Java接口Result设计
  2. java 字母图形_Java字母图形
  3. 利用js对页面数据进行排序
  4. 面试官问的hibernate和mybatis常见面试题
  5. git提交代码到github时出现everything up-to-date,但是代码没有上传成功
  6. rust(34)-Rust and WebAssembly(2)
  7. Qt Creator指定代码样式设置
  8. 拷贝的代码中去除行号的方法
  9. LeetCode 771. 宝石与石头
  10. 出现次数超过一半的数(信息学奥赛一本通-T1186)
  11. 动态添加Html单元格时,事件怎么写?如mouseover事件
  12. mysql 转ascii_MySQL ascll()函数
  13. android vulkan 游戏,王者荣耀Vulkan版
  14. 隔空投送怎么用「详细教程」
  15. 【mosek.fusion】Primal SVM
  16. 全球知名开源项目与组织齐聚!——峰会【开源开放 生态共建】论坛来啦
  17. 最新 | 诺奖得主涉嫌论文造假
  18. 【Java定时器】每天凌晨12点执行一次
  19. C. Edgy Trees---(思维题+并查集的运用)---Codeforces Round #548 (Div. 2)
  20. The server quit without updating PID file解决方法

热门文章

  1. jbe 可以用来修改Java class的字节码,配合jd-gui 使用
  2. C++ placement new 用法
  3. bootbox.js bootbox.promt()
  4. Jmeter报错Couldn‘t save test plan to file
  5. 计算机弹音乐薛之谦的歌曲,薛之谦 万能音符(The Key) 薛之谦歌曲,薛之谦mp3在线试听 - 5nd音乐网...
  6. Fiddler爬取抓包(网页及小程序包)
  7. python 会计分录模板_常见会计分录大全(15种小企业模板)
  8. mac 下使用ssh
  9. OGL纹理之纹理过滤器和多级渐进纹理mipmap
  10. 天池比赛——Docker基础镜像搭建,容器导出镜像