题解2023.5.23(欧拉筛)

news2025/1/12 9:56:53

C.Hossamand Trainees
 欧拉筛,预处理先筛出质数,分解质因数对于出现两次及以上的输出yes
 我们需要筛出根号(1e9)以内的所有质数,根据质数定理,大约有4e^3个质数,
 时间复杂度分析:le5*4e3=4e8

#include<bits/stdc++.h>
#pragma GCC optimize(2)
#pragma GCC optimize(3)
#pragma GCC optimize(fast) 
#include<iostream>
#include<algorithm>
#include<map>
#include<set>
#include<queue>
#include<cstring>
#include<math.h>
#include<map>
#include<vector>
#define ms(x,y) memset(x,y,sizeof x)
#define int long long 
const int maxn = 2e5 + 10, INF = 0x3f3f3f3f;
using namespace std;
int a[maxn];
int cnt = 0;
int st[1000060];
int p[1000060];
void init() {
    for (int i = 2; i < 40000; i++) {
        if (!st[i])
            p[cnt++] = i;
        for (int j = 0; p[j] * i < 40000; j++) {
            st[p[j] * i] = true;
            if (i % p[j] == 0)
                break;
        }
    }
}
void solve() {
    int n;
    cin >> n;
    map<int, int>mp;
    for (int i = 1; i <= n; i++) {
        cin >> a[i];
    }
    for (int i = 1; i <= n; i++) {
        int num = a[i];
        for (int j = 0; p[j] * p[j] <= num; j++) {
            int p1 = p[j];
            if (num % p1 == 0) {
                while (num % p1 == 0) {
                    num /= p1;
                }
                mp[p1]++;
                if (mp[p1] > 1) {
                    cout << "YES" << '\n';
                    return;
                }

            }
        }
        if (num >1)mp[num]++;
        if (mp[num] > 1) {
            cout << "YES" << '\n';
            return;
        }
    }
    cout << "NO" << '\n';
}
signed main()
{
    ios::sync_with_stdio(false);
    init();
    int t;
    cin >> t;
    while (t--) {
        solve();
    }
}


B.Hossamand Friends
 思路:双指针,用一个数组记录右指针可取的最大左边界
 

#include<bits/stdc++.h>
#pragma GCC optimize(2)
#pragma GCC optimize(3)
#pragma GCC optimize(fast) 
#include<iostream>
#include<algorithm>
#include<map>
#include<set>
#include<queue>
#include<cstring>
#include<math.h>
#include<map>
 #include<vector>
#define ms(x,y) memset(x,y,sizeof x)
#define int long long 
const int maxn=2e5+10,INF = 0x3f3f3f3f ; 
using namespace std;
int a[maxn];
 void solve(){
     int n, m;
     cin >> n >> m;
     vector<int>l(n+1);  //左边界
     for (int i = 1; i <= m; i++) {
         int x, y;
         cin >> x >> y;
         if (x < y)swap(x, y);
         l[x] = max(l[x], y);
     }
     int sum = 0;
     int r = 1;
     for (int i = 1; i <=n; i++) {
         while (r + 1 <= n && l[r + 1] < i) ++r;
         sum += (r-i + 1);
     }
     cout << sum << '\n';
 }
signed main()
{
    ios::sync_with_stdio(false);
    int t;
    cin >> t;
    while (t--) {
        solve();
    }
}


G.Chevonne’s Necklace
思路:采用dp,01背包,可取大小视为体积,
因为选择移除的珍珠(p1,p2...)可取大小(ap1+ap2...)的和<=n,至少存在一个下一次选中的珍珠与上一次选中珍珠的距离dis>cpi,否则矛盾
故移除顺序不影响方案数,最终选中的珍珠是从珍珠1开始的连续编号.
 

#include<bits/stdc++.h>
#pragma GCC optimize(2)
#pragma GCC optimize(3)
#pragma GCC optimize(fast) 
#include<iostream>
#include<algorithm>
#include<map>
#include<set>
#include<queue>
#include<cstring>
#include<math.h>
#include<map>
 #include<vector>
#define ms(x,y) memset(x,y,sizeof x)
#define int long long 
const int maxn=2e5+10,INF = 0x3f3f3f3f ; 
const int mod = 998244353;
using namespace std;
int a[maxn];
int dp[maxn];   //记录方案数,dp[i]表示当取i个珍珠时的最大方案数
bool vis[maxn];
void solve(){
     int n;
     cin >> n;
     for (int i = 0; i<n; i++) {
         cin >> a[i];
     }
     dp[0] = 1;
     vis[0] = 1;
     for (int i = 0; i < n; i++) {  //枚举珍珠编号
         if (a[i] >= 1) {
             for (int j = n; j >= a[i]; j--) {    //01
                 vis[j] |= vis[j-a[i]];   //记录珍珠状态
                 dp[j] = (dp[j] + dp[j - a[i]]) % mod;
             }
         }
     }
     int sum = n;
     while (!vis[sum]) {
         sum--;
     }
     cout << sum << ' ' << dp[sum]%mod << '\n';
 }
signed main()
{
    ios::sync_with_stdio(false);
        solve();
}


G - ORXOR
思路:状态压缩,枚举所有状态,对标记点集合异或,集合元素或运算
 

#include<bits/stdc++.h>
#pragma GCC optimize(2)
#pragma GCC optimize(3)
#pragma GCC optimize(fast) 
#include<iostream>
#include<algorithm>
#include<map>
#include<set>
#include<queue>
#include<cstring>
#include<math.h>
#include<map>
 #include<vector>
 #include<stack>
#define ms(x,y) memset(x,y,sizeof x)
#define int long long 
const int maxn=2e5+10,INF = 1e18 ; 
using namespace std;
int a[maxn];
 void solve(){
     int n;
     cin >> n;
     for (int i = 0; i < n; i++) {
         cin >> a[i];
     }
     int Min = INF;
     for (int i = 0; i <(1<<n); i++) {   //枚举所有状态
         int t1=0, t2=0;
         for (int j = 0; j <= n; j++) {  //枚举所有元素,多一次进行最终合并
             if (j < n)  t1 |= a[j];      //|00为0
             if (j == n || i & ((1) << j)) {
                 t2 ^= t1;
                 t1 = 0;
             }
         }
         Min = min(Min, t2);
     }
     cout << Min << '\n';
 }
signed main()
{
    ios::sync_with_stdio(false);
    int t;
    solve();
}

C:Hamiltonian Wall
题意:能否一笔把B格子全部画完(一笔画完)
思路:使用dp,记录最后一个B位置和第一个B位置,若最后一列的B能否由开头转移过来,则YES,否则NO
转移的策略有三种,
1.一列有两个B,转移位置与上一列B转移位置相异;
2.一列有一个B,位置与上一列(一个B)位置相同
3.一列有一个B,位置与上一列(两个B)转移位置相同

#pragma GCC optimize(2)
#pragma GCC optimize(3)
#pragma GCC optimize(fast) 
#include<iostream>
#include<algorithm>
#include<map>
#include<set>
#include<queue>
#include<cstring>
#include<math.h>
#include<map>
 #include<vector>
 #include<stack>
#define ms(x,y) memset(x,y,sizeof x)
#define int long long 
const int maxn=2e5+10,INF = 1e18 ; 
using namespace std;
int a[3][maxn];
int f[maxn][3];   
 void solve(){
     int n;
     cin >> n;
     for (int i = 1;i<=2; i++) {
         for (int j = 1; j <= n; j++) {
             char c;
             cin >> c;
             if (c == 'B')
                 a[i][j] = 1;
             else
                 a[i][j] = 0;
         }
     }
     int Min = n+1, Max = -1, flag = 0;
     for (int i = 1; i <= n; i++) {
         f[i][1] = 0;
         f[i][2] = 0;
         if (a[1][i] || a[2][i]) {
             Min = min(Min, i);
             Max = max(Max, i);
             flag = 1;
         }
     }
     if (!flag) {
         cout << "YES" << '\n';
         return;
     }
     f[Min][1] = (a[1][Min] == 1);
     f[Min][2] = (a[2][Min] == 1);
     for (int i = Min+1; i <= Max; i++) {
         if (a[1][i] == 1 && a[2][i] == 1) {
             f[i][1] = f[i - 1][2];
             f[i][2] = f[i - 1][1];
         }
         if (a[1][i] == 1 && a[2][i] == 0) {
             f[i][1] = f[i - 1][1];
         }
         if (a[1][i] == 0 && a[2][i] == 1) {
             f[i][2] = f[i - 1][2];
         }
     }
     if (f[Max][1] || f[Max][2]) {
         cout << "YES" << '\n';
     }
     else {
         cout << "NO" << '\n';
     }

 }
signed main()
{
    ios::sync_with_stdio(false);
    int t;
    cin >> t;
    while (t--) {
        solve();
    }
}


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/561154.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python 3.10.11 liunx系统安装

官网下载 https://www.python.org/downloads/source/ 将tar包上传服务器安装 安装基础功能软件 yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel 解压安装 tar -z…

chatgpt赋能Python-python_noob

Python for Beginners: An Introduction to the World’s Most Popular Programming Language Python is a high-level programming language that has become one of the most popular and widely used languages in the world. It’s simple, easy to read, and has a vast …

chatgpt赋能Python-python_pecan

Python Pecan: 构建Web应用程序的高效框架 Python是一种简单易学、功能强大的编程语言&#xff0c;非常适合Web应用程序的开发。而Pecan则是一个基于Python的高效框架&#xff0c;可以简化Web应用程序的开发过程。本文将介绍Python Pecan框架的优点、使用方法和性能表现。 什…

计算机网络考试多选题汇总Ⅱ(请关注博客在资源文档下载完整答案)

https://cadyin.blog.csdn.nethttps://blog.csdn.net/qq_38639612?spm1010.2135.3001.5421 计算机网络考试多选题汇总 1、在Windows中&#xff0c;任务管理器的作用是() A&#xff0e;终止未响应的应用程序 B&#xff0e;终止进程的运行 C&#xff0e;查看系统当前的信息 …

【新星计划·2023】网络协议———DHCP讲解

前言 在工作中&#xff0c;利用DHCP可以有效的节约IP地址&#xff0c;既保证了网络通信&#xff0c;又提高IP地址的使用率。 一、DHCP是什么&#xff1f; DHCP全称为Dynamic Host Configuration Protocol&#xff0c;是一种网络管理协议&#xff0c;中文含义为“动态主机配置…

node版本引起的一系列问题

1. 安装node node官方地址 下载对应系统zip到对应的文件夹解压 在目录下创建文件夹node_cache 和 node_global 修改 npm 配置&#xff0c;配置 npm 的全局模块的存放路径以及 cache 的路径 //npm config set prefix 文件路径 npm config set prefix D:\software\nodeJs\n…

shell 免交互

文章目录 Here Document 免交互实验多行注释基本命令 实验 Here Document 免交互 使用I/O重定向的方式将命令列表提供给交互式程序或命令&#xff0c;比如 ftp、cat 或 read 命令。是标准输入的一种替代品可以帮助脚本开发人员不必使用临时文件来构建输入信息&#xff0c;而是…

DR2: Diffusion-based Robust Degradation Remover for Blind Face Restoration

DR2: Diffusion-based Robust Degradation Remover for Blind Face Restoration (Paper reading) Zhixin Wang, Shanghai Jiao Tong University, CH, CVPR2023, Cited:0, Code, Paper 1. 前言 传统的盲脸部修复通常使用预定义的退化模型来合成降质的低质量数据进行训练&#…

CodeForces.1810B.糖果.[中等][ifelse选择][注意输出格式]

题目描述&#xff1a; 解题思路&#xff1a; 题目解读&#xff1a; 初始状态只有一个糖果&#xff0c;即x1&#xff0c;给定想要获得的总糖果数y。 只能进行两种操作&#xff0c;分别是做2x-1和2x1。给出从 x1 到 目标数字 y 的操作步数和具体步骤。 示例1 从1到2&#xff…

2023最全CTF入门指南(建议收藏)

目录 一、CTF简介 二、CTF竞赛模式 三、CTF各大题型简介 四、CTF学习路线 4.1、初期 1、htmlcssjs&#xff08;2-3天&#xff09; 2、apachephp &#xff08;4-5天&#xff09; 3、mysql &#xff08;2-3天&#xff09; 4、python (2-3天) 5、burpsuite &#xff08;…

防火墙——iptables防火墙(四表五链、防火墙配置方法、匹配规则详解)

iptables防火墙 一、Linux包过滤防火墙1、Linux防火墙概述2、netfilter3、iptables4、netfilter/iptables关系 二、四表五链1、表链作用2、四表3、五链4、数据包到达防火墙时&#xff0c;规则表之间的优先顺序5、规则链之间的匹配顺序 三、iptables的安装四、iptables防火墙的配…

chatgpt赋能Python-python_nornir

Python Nornir - 让网络自动化更高效 随着网络技术的发展和网络设备的不断增多&#xff0c;网络自动化成为了现代网络管理的必备技能。然而&#xff0c;手动编写和执行网络任务的方式不仅费时费力&#xff0c;也容易出错和难以维护。 Python Nornir 是一个开源的网络自动化框…

Android 事件分发机制

Android 事件分发机制 概述事件分发过程的主要方法&#xff1a; ViewView 事件的分发 dispatchTouchEventView 事件的处理&#xff08;消费&#xff09;onTouchEvent&#xff1a; ViewGroupViewGroup 事件的分发 dispatchTouchEvent 概述 这里的事件指的是 View 对手势的响应&…

chatgpt赋能Python-python_pe

Python PE&#xff08;Python Performance Engineering&#xff09;介绍 Python PE&#xff08;Python Performance Engineering&#xff09;是Python编程的一个方面&#xff0c;旨在提高Python程序的性能和效率。PE的目标是优化Python程序的执行时间、内存占用和资源消耗&…

chatgpt赋能Python-python_nargs

Python nargs 介绍 在 Python 中&#xff0c;nargs 是使用 argparse 模块中用于定义命令行参数的选项之一。通过使用 nargs&#xff0c;我们可以为每个参数指定一个特定的值。它可以接受以下几种不同的值&#xff1a; ‘?’&#xff1a;表示该参数可以有零个或一个值。‘*’…

Vulkan Tutorial 3 图形管线基础

目录 0 管线 8 着色器 9 固定功能 10 渲染通道 结论 0 管线 我们将设置一个图形管道&#xff0c;并将其配置为绘制我们的第一个三角形。图形管道是将网格的顶点和纹理一直带到渲染目标中的像素的操作序列。 带有绿色的阶段被称为固定功能阶段。这些阶段允许你使用参数来…

Spark大数据处理讲课笔记---Spark RDD典型案例

零、本节学习目标 利用RDD计算总分与平均分利用RDD统计每日新增用户利用RDD实现分组排行榜 一、利用RDD计算总分与平均分 &#xff08;一&#xff09;提出任务 针对成绩表&#xff0c;计算每个学生总分和平均分 &#xff08;二&#xff09;实现思路 读取成绩文件&#xff…

springboot之banner

Springboot的Banner 1、banner的作用2、使用banner的方式2.1、默认banner(不设置任何banner)2.2、自定义banner(自定义类实现org.springframework.boot.Banner)2.3、默认banner文件&#xff08;classpath:banner.txt/banner.gif/banner.jpg/banner.png&#xff09;2.4、自定义b…

支付宝SDK接口调试- cpolar内网穿透工具实现公网地址调试

文章目录 1.测试环境2.本地配置3. 内网穿透3.1 下载安装cpolar内网穿透3.2 创建隧道 4. 测试公网访问5. 配置固定二级子域名5.1 保留一个二级子域名5.2 配置二级子域名 6. 使用固定二级子域名进行访问 转发自cpolar内网穿透的文章&#xff1a;Java支付宝沙箱环境支付&#xff0…

Linux——iptables防火墙

iptables防火墙 一.Linux包过滤防火墙概述1.iptables概述2.netfilter/iptables关系 二、四表五链1.四表五链的关系2.四表3.五链 三、匹配顺序1.数据包到达防火墙的匹配流程2.规则链之间的匹配顺序3.规则链内的匹配顺序 四、iptables 防火墙的配置方法1.iptables 命令行配置方法…