codeforces801E Vulnerable Kerbals

题目大意:

给定n个数,构造一个序列,满足所有前缀积模m互不相等且不与n个数中任意一个相等。最大化序列长度。

将1~m-1每个数作为一个点,如果存在a,使得 i*a=j (mod m),那么从i向j连一条有向边。那么答案就是图中的最长路径。

又因为如果 i*a=j (mod m),则gcd(i,m)|gcd(j,m),所以可以将gcd(i,m)相等的所有点缩成一个点,每个点向gcd(j,m)是gcd(i,m)倍数的点j连权值为i点集大小的边。

显然缩成的每个点是个团,且得到的图是一个DAG图,求一遍拓扑就可以了。

输出序列用拓展欧几里得。

代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
using namespace std;
#define N 200010
#define ll long long
vector<int>g[N],a[N];
bool b[N];
ll Last,x,y;
int i,j,s[N],k,n,m,c[N],d[N],q[N],l,r,f[N],Ans,p[N];
inline int Max(int x,int y){return x<y?y:x;}
inline int Gcd(int x,int y){
    if(y==0)return x;
    return Gcd(y,x%y);
}
inline void Ex_gcd(ll a,ll b){
    if(b==0){x=1;y=0;return;}
    Ex_gcd(b,a%b);
    ll t=x;x=y;y=t-(a/b)*y;
}
int main(){
    scanf("%d%d",&n,&m);
    for(i=1;i<=n;i++)scanf("%I64d",&x),b[x]=1;
    for(i=1;i<m;i++){
        if(!b[i])a[Gcd(i,m)].push_back(i);
        if(m%i==0)for(j=2;j*i<m;j++)g[i].push_back(j*i),d[j*i]++;
    }
    for(i=1;i<m;i++)if(m%i==0)s[i]=a[i].size();
    for(i=1;i<m;i++)
    if(m%i==0&&!d[i])q[++r]=i,f[i]=s[i];
    while(++l<=r){
        x=q[l];
        if(f[x]>f[Ans])Ans=x;
        for(j=0;j<g[x].size();j++){
            if(f[x]+s[g[x][j]]>f[g[x][j]])f[g[x][j]]=f[x]+s[g[x][j]],p[g[x][j]]=x;
            if(--d[g[x][j]]==0)q[++r]=g[x][j];
        }
    }
    printf("%d\n",f[Ans]+(b[0]?0:1));
    for(i=Ans,r=1;i;i=p[i])
    for(j=0;j<a[i].size();j++)q[r++]=a[i][j];
    if(r>1)printf("%d",q[--r]);Last=q[r];
    while(--r){
        Ex_gcd(Last,m);
        x=(x*q[r]/Gcd(Last,m)%m+m)%m;
        printf(" %I64d",x);
        Last=Last*x%m;
    }
    if(!b[0])puts(" 0");
    return 0;
}

codeforces801E

时间: 2024-07-28 19:29:15

codeforces801E Vulnerable Kerbals的相关文章

DVRF:路由器漏洞练习靶机 Damn Vulnerable Router Firmware

0×01 概述 这个项目的目的是来帮助人们学习X86_64之外其他架构环境,同时还帮助人们探索路由器固件里面的奥秘. 目前为止,该项目是基于Linksys E1550 为基础进行安装. 0×02 安装 友情提示,安装前请先备份路由器固件,以备不时之需. 1.使用管理员帐户密码登录E1550 2.访问固件更新页面,http://192.168.1.1/Upgrade.asp 3.上传Damn Vulnerable Router Firmware (DVRF) v0.1 固件DVRF_v01.bin

漏洞演示系统DVWA(Damn Vulnerable Web Application) V1.8渗透测试攻略

漏洞演示系统DVWA(Damn Vulnerable Web Application) V1.8攻略 测试环境: 操作系统:Windows 8.1 .Windows 7 运行时:.Net Framework 3.5 PHP+MySQL集成测试环境:XAMPP V3.2.1 首先,从http://www.dvwa.co.uk/ 下载DVWA,并将文件释放到c:\xampp\htdocs\DVWA 修改配置文件config\config.inc.php ,设置数据库连接账号及默认的安全级别: $_D

DVWA (damn vulnerable web application)_try to know hackers

关于这个damn vulnerable web application,如下链接有下载地址及配置方法 https://my.oschina.net/u/3776619/blog/1803401 https://blog.csdn.net/qq_35544379/article/details/77502066 官方下载地址 http://www.dvwa.co.uk http://www.wampserver.com/en/#download-wrapper 原文地址:https://www.c

《Complex social contagion makes networks more vulnerable to disease outbreaks》

复杂的社会传染使网络更容易发生疾病爆发 摘要 社会网络被广泛的应用于人与人之间传染病的动态传播.疫苗干扰了疾病在网络中的传播过程.确实,足够高的疫苗接种率在很大程度上能够有效地阻止疾病在网络中传播.我们有越来越多的证据表明,健康的行为需要社会强化.健康行为可以通过复杂的传染过程在社会网络中传播,如接种疫苗,拒绝方法等.通过对健康行为和传染病传播过程仿真建模,我们发现,在其他条件相同的前提下,健康行为的传播过程对疾病传播动力学有很大的影响.动力学产生变化的原因在于,含易感人群的拓扑结构的不同,易感

WordPress plugin Contact Form [CSRF → LFI] vulnerable 2019-03-17

# Exploit Title: Contact Form by WD [CSRF → LFI]# Date: 2019-03-17# Exploit Author: Panagiotis Vagenas# Vendor Homepage: http://web-dorado.com/# Software Link: https://wordpress.org/plugins/contact-form-maker# Version: 1.13.1# Tested on: WordPress 5.

谷歌将一些弱小的库从安卓代码移除Google Removes Vulnerable Library from Android

Google this week released the November 2018 set of security patches for its Android platform, which address tens of Critical and High severity vulnerabilities in the operating system. The addressed issues include remote code execution bugs, elevation

手把手教你如何搭建自己的渗透测试环境

介绍 白帽子是指个体发起的黑客攻击,找到系统潜在的可能被恶意黑客利用的的漏洞或脆弱点.在目标不知情或者没得到授权的情况下发起黑客攻击是非法的.所以通常是建立一个自己的实验室,练习黑客技术. 在这个实验室里,你能看到如何创建一个自己的黑客环境,练习各种各样的黑客攻击技术.我们将会探讨不同类型的虚拟系统,构建一个虚拟网络,在虚拟环境中运行试用版的操作系统,搭建一个有漏洞的web应用程序,安装Kali LInux,执行渗透测试. 所需条件: VMware Workstation Windows XP系

通过编写一个简单的漏洞扫描程序学习Python基本语句

今天开始读<Python绝技:运用Python成为顶级黑客>一书,第一章用一个小例子来讲解Python的基本语法和语句.主要学习的内容有:1. 安装第三方库.2. 变量.字符串.列表.词典.3. 网络的编程.4. 条件选择语句和for循环.5. 异常处理.6. 函数.7. 文件输入/输出.8. sys模块和os模块.把最后的代码贴在这里,做个记录. import socket import os import sys port = 21 banner = "FreeFloat FTP

Summer training #7

B:读懂题意模拟 #include <bits/stdc++.h> #include <cstring> #include <iostream> #include <algorithm> #define foror(i,a,b) for(i=a;i<b;i++) #define foror2(i,a,b) for(i=a;i>b;i--) #define EPS 1.0e-6 #define PI acos(-1.0) #define INF 3