当前位置: 首页 > 编程日记 > 正文

LOJ 2721 「NOI2018」屠龙勇士——扩展中国剩余定理

题目:https://loj.ac/problem/2721

1.注意别一输入 p[ i ] 就 a[ i ] %= p[ i ] ,因为在 multiset 里找的时候还需要真实值。

2.注意用 multiset 。并且,因为要 upper_bound( a[ i ] ) ,而 a[ i ] 是一个 long long 类型的,所以即使 multiset 里装的都是 int 类型的,也得开成 long long 的 multiset 。

3.注意除了同余的限制,还有一个是 \( x*c_i >= a_i \) (\(c_i\)就是对应剑的攻击力);只需要在最后用所有 p 的 lcm 调整一下即可。

4.注意要用大数乘法……再各种地方都要注意是否可以直接乘。

别写错扩展 CRT ,特别是 x 乘上 r/g 那个部分。

不太明白为了最后的 x 是最小正整数,是否需要让中间过程中的每个 x 都是最小正整数。

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<set>
#define ll long long
using namespace std;
ll rdn()
{ll ret=0;bool fx=1;char ch=getchar();while(ch>'9'||ch<'0'){if(ch=='-')fx=0;ch=getchar();}while(ch>='0'&&ch<='9')ret=ret*10+ch-'0',ch=getchar();return fx?ret:-ret;
}
ll Mx(ll a,ll b){return a>b?a:b;}
const int N=1e5+5;
int n,m,atk[N]; ll a[N],p[N],lm; bool fg;
struct Node{ll a,p;Node(ll a=0,ll p=0):a(a),p(p) {}
};
multiset<ll> st;//multiset not set!!!!!!
ll Mul(ll a,ll b,ll mod)
{ll d=(ll)floor((double)a*b/mod+0.5);ll ret=a*b-d*mod; if(ret<0)ret+=mod; return ret;
}
ll exgcd(ll a,ll b,ll &x,ll &y)
{if(!b){x=1;y=0;return a;}ll ret=exgcd(b,a%b,y,x); y-=a/b*x; return ret;
}
void init()
{for(int i=1;i<=n;i++)a[i]=rdn();for(int i=1;i<=n;i++)p[i]=rdn()/*,a[i]%=p[i]*/;//for setfor(int i=1;i<=n;i++)atk[i]=rdn();st.clear(); lm=0;/for(int i=1,d;i<=m;i++)d=rdn(),st.insert(d);multiset<ll>::iterator it,it2;ll d,x,y;for(int i=1;i<=n;i++){it=st.upper_bound(a[i]);///for here <ll> not <int>if(it!=st.begin())it--;d=(*it); st.erase(it); st.insert(atk[i]);ll g=exgcd(d,p[i],x,y);a[i]/=g; p[i]/=g; d/=g;///
      lm=Mx(lm,(ll)ceil((double)a[i]/d));//
      a[i]=Mul(a[i],x,p[i]);///
    }
}
Node cal(Node u,Node v)
{ll a=u.p, b=v.p, r=v.a-u.a, x,y;ll g=exgcd(a,b,x,y);if(r%g){ fg=1;return Node(0,0);}a/=g; b/=g; r/=g;x=Mul(x,r,b);///y=a*b*g; x=(u.a+Mul(x,u.p,y))%y;return Node(x,y);
}
int main()
{freopen("dragon.in","r",stdin);freopen("dragon.out","w",stdout);int T=rdn();while(T--){n=rdn();m=rdn(); fg=0; init();if(fg){puts("-1");continue;}Node cr=Node(a[1],p[1]);if(fg){puts("-1");continue;}for(int i=2;i<=n;i++){cr=cal(cr,Node(a[i],p[i]));if(fg){ puts("-1");break;}}if(fg)continue;if(cr.a<lm){ll k=ceil((double)(lm-cr.a)/cr.p);cr.a+=k*cr.p;}if(!fg)printf("%lld\n",cr.a);}return 0;
}

转载于:https://www.cnblogs.com/Narh/p/10956882.html

相关文章:

setuid和setgid

setuid 和 setgid (全称分别是&#xff1a;set user ID upon execution 和 set group ID upon execution)是Unix的访问权限标志位&#xff0c;它允许 用户以可执行文件owner或group的权限来运行这个可执行文件。它们经常适用于&#xff1a;为了运行特定的任务&#xff0c;可以允…

Java项目:宠物医院预约挂号系统(java+JSP+Spring+SpringBoot+MyBatis+html+layui+maven+Mysql)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 一、项目简述功能包括&#xff1a; 用户分为宠物&#xff0c;医生&#xff0c;管理员&#xff0c;宠物主人可进行注册选择医生挂号&#xff0c;选择日期&#xff0c;选择号源&#xff0c;医生可进行宠物接诊…

大智慧面试经验

15-06-18下午1点&#xff0c;大智慧面试&#xff1b; 面试题全英文&#xff0c;第一部分基础的&#xff0c;诸如echo print printf的区别&#xff0c;include与require的区别等&#xff1b; 第二部分细节方面的&#xff0c;如在string中\n的意义&#xff0c;ucwords函数&#x…

Android 获取apk签名的fingerprint

为什么80%的码农都做不了架构师&#xff1f;>>> 假定安装了JDK&#xff0c;如果想查HelloWorld.apk所使用的签名的fingerprint&#xff0c;可以这样做&#xff1a;1. 查找apk里的rsa文件 &#xff08;Windows&#xff09; > jar tf HelloWorld.apk |findstr RSA…

Dinic二分图匹配 || Luogu P3386

题面&#xff1a;【模板】二分图匹配 思路&#xff1a;Dinic实现二分图匹配&#xff0c;要建一个超级源点&#xff08;S&#xff09;和超级汇点&#xff08;T&#xff09;&#xff0c;分别定为NM1和NM2 然后S去和N中的数建正边和反边&#xff0c;正边权值为1&#xff0c;反边权…

shell中引号的使用方法

1. shell使用引号(单引号/双引号)和反斜线("\")用于向shell解释器屏蔽一些特殊字符. 反引号[h2] 对shell则有特殊意义. 1.1 单引号和反斜线 [h1] 可以阻止shell代入变量的值&#xff1b; 1.2 双引号不能阻止代入 例如&#xff1a; sles10i32-1:han$ personha…

Java学习笔记(二)不定时更新

Java语言画图 package cn.witksy.dev;import javax.imageio.ImageIO; import java.awt.*; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException;/*** Author: Alfred* Created: 2015/5/7*/ public class Main {public void run() {Buffered…

Java项目:前台后台玩具商城系统(java+JSP+SSM+Springboot+Jsp+maven+Mysql)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 一、项目简述本系统主要实现的功能有&#xff1a; 网上商城系统&#xff0c;前台后台管理&#xff0c;用户注册&#xff0c;登录&#xff0c;商品展示&#xff0c;分组展示&#xff0c;搜索&#xff0c;收货…

Tempdb数据库详细介绍

Tempdb数据库详细介绍一、Tempdb简介tempdb是SQLServer的系统数据库一直都是SQLServer的重要组成部分&#xff0c;用来存储临时对象。可以简单理解tempdb是SQLServer的速写板。应用程序与数据库都可以使用tempdb作为临时的数据存储区。一个实例的所有用户都共享一个Tempdb。很明…

java——逻辑运算符与(和)或(|和||)

区别&#xff1a; 1意思不同&#xff1a; &&是“与”的意思&#xff0c;||是“或者”的意思。 2 使用上不同&#xff1a;a && b&#xff1a;a和b同时为true 才返回 true&#xff0c; 否则返回false&#xff1b;a || b&#xff1a;a或b任意一个为true 就返回tru…

UTRAN 的用户面和控制面

UTRAN接口的通用协议模型如下图&#xff1a; 通俗地讲&#xff0c;通讯网络由终端(terminal)、连接(links)、网络节点(nodes)组成, links将nodes 关联起来。源终端(MO)发送的消息是怎样才能到目的终端(MT)呢? 消息经过links 和nodes,直至到达MT&#xff0c;其中关键是nodes怎么…

Java项目:疫情人员流动管理系统(java+JSP+SSM+Springboot+maven+Mysql)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 一、项目简述 本系统主要实现的功能有&#xff1a; 社区疫情流动人员管理系统&#xff0c;住户管理&#xff0c;出入管理&#xff0c;访客管理&#xff0c;体温录入&#xff0c;高风险警示等等。 二、项目运…

[原创]CentOS下Mysql双机互为备份

一、环境&#xff1a; 1.安装Centos-6.5-x64位系统的机器两台&#xff1a; host1&#xff1a;192.168.2.3 host2&#xff1a;192.168.2.4 &#xff08;互相能ping通&#xff09; 2.安装Mysql。 命令&#xff1a;Yum install mysql-* 二、配置&#xff1a; 1、启动mysql。命令&…

《Effective Java》读书笔记--创建和销毁对象

2019独角兽企业重金招聘Python工程师标准>>> 考虑用静态工厂方法代替构造函数。 当我们在写一个工具类时&#xff0c;是不希望用户将该类实例化的&#xff0c;所以应该定义一个private的构造函数&#xff0c;而不 是将类声明成abstract&#xff0c;因为这样用户可以…

用chrome的snippets片段功能创建页面js外挂程序,从控制台创建js小脚本

用chrome的snippets片段功能创建页面js外挂程序&#xff0c;从控制台创建js小脚本 Chrome的snippets是小脚本&#xff0c;还可以创作并在Chrome DevTools的来源面板中执行。可以访问和从任何页面运行它们。当你运行一个片段&#xff0c;它从当前打开的页面的上下文中执行。 要创…

两个类相互包含引用的问题--类前向声明

在构造自己的类时&#xff0c;有可能会碰到两个类之间的相互引用问题&#xff0c;例如&#xff1a;定义了类A类B&#xff0c;A中使用了B定义的类型&#xff0c;B中也使用了A定义的类型 class A { int i; B b; } class B { int i; A* a; } 请注意上面的定义内…

Java项目:网上电子书城项目(java+SSM+JSP+maven+Mysql)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 项目描述&#xff1a; spring mvc jsp实现的简单书城项目&#xff0c;可以在支付宝沙箱内实现支付 运行环境&#xff1a; jdk8tomcat9mysqlIntelliJ IDEA 项目技术&#xff1a; springspring mvcmybati…

[nowCoder] 局部最小值位置

定义局部最小的概念。arr长度为1时&#xff0c;arr[0]是局部最小。arr的长度为N(N>1)时&#xff0c;如果arr[0]<arr[1]&#xff0c;那么arr[0]是局部最小&#xff1b;如果arr[N-1]<arr[N-2]&#xff0c;那么arr[N-1]是局部最小&#xff1b;如果0<i<N-1&#xff…

log parser 微软iis 日志分析

Log Parser 2.2 您可以从 Microsoft 下载中心下载 Log Parser。 Log Parser 2.2 是一个功能强大的通用工具&#xff0c;它可对基于文本的数据&#xff08;如日志文件、XML 文件和 CSV 文件&#xff09;以及 Windows 操作系统上的重要数据源&#xff08;如事件日志、注册表、文件…

ubuntu 大小写指示的小工具

最近买个了小本lenovo x100e&#xff0c;结果发现这小本没有大小写指示灯&#xff0c;在windows用也无妨&#xff0c;不过我常常用这本在ubuntu中调试linux代码&#xff0c;vi 常用的编辑器&#xff0c;熟悉的都知道&#xff0c;大小写很关键的&#xff0c;用google搜了一下&am…

mysql主键约束和唯一性约束

主键约束和唯一性约束都是索引&#xff0c;它们的区别是&#xff1a; 主键字段可以确保唯一性&#xff0c;但主键字段不能为NULL.唯一性约束可以确保唯一性&#xff0c;但唯一性约束的字段可以为NULL唯一性约束对含有NULL的记录不起作用&#xff0c;即可以重复加入含有NULL的记…

Java项目:农资采购销售系统(java+SSM+Easyui+maven+Mysql)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 项目描述&#xff1a; 一个完整的农资采购销售系统&#xff0c;系统分为前台会员注册登陆&#xff0c;农资信息浏览&#xff0c;农资详情信息查看&#xff0c;加入购物车&#xff0c;提交订单&#xff0c;付…

springMVC 拦截器

为什么80%的码农都做不了架构师&#xff1f;>>> 实现springMVC 拦截器步骤&#xff1a; 1.定义拦截器类HandlerInterceptor 继承HandlerInterceptor public class Interceptor implements HandlerInterceptor { /**preHandle&#xff1a;预处理回调方法&#…

django学习笔记--数据库中的多表操作

1.Django数据库----多表的新增操作 1.一对一模式下新增 创建一个详情对象&#xff0c;把这个对象赋值给创建的新的user对象 author_detail models.AuthorDetail.objects.create(addr上海,phone178****4789) # 直接设置author_detail为一个对象 author models.Author.objects.…

+z +Z compiler flag for HP

1. 今天遇到一问题&#xff0c;在sles11/vxworks下编译通过&#xff0c;但是在hpux下失败 2. 编译错误&#xff1a; /usr/ccs/bin/ld:DP relative code in file /projects/xxx/DERIVED/tfa_pa32-hpux.a(tfa02_pa32-hpux.o) -shared library must be position indep…

DP UVALive 6506 Padovan Sequence

题目传送门 /*题意&#xff1a;两行数字&#xff0c;相邻列一上一下&#xff0c;或者隔一列两行都可以&#xff0c;从左到右选择数字使和最大DP&#xff1a;状态转移方程&#xff1a;dp[i][j] max (dp[i][j], dp[1-i][j-1] a[i][j], dp[i/1-i][j-2] a[i][j]);要从前面一个转…

Java项目:基于遗传算法学校排课系统(java+Springboot+Maven+mybatis+Vue+Mysql)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 一、项目简述本系统功能包括&#xff1a; 排课管理&#xff0c;课程管理&#xff0c;讲师管理&#xff0c;班级管理&#xff0c;学生管理&#xff0c;教学资料&#xff0c;学习文档&#xff0c;在线测试&…

冲刺周期会议七

一、会议时间&#xff1a;2014年5月6日20:30--21:00 二、会议地点&#xff1a;学院楼一楼大厅 三、会议目的:统计任务进度&#xff0c;记录会议问题 四、会议内容&#xff1a; 1、对近几天的项目进度进行总结&#xff1a; 由于刚刚开始学习安卓&#xff0c;无论是配置环境还是学…

chrdev字符设备几种注册方式的差异

数据结构 #define CHRDEV_MAJOR_HASH_SIZE 255static struct char_device_struct {struct char_device_struct *next;unsigned int major;unsigned int baseminor;int minorct;char name[64];struct file_operations *fops;struct cdev *cdev; /* will die */ } *chrdevs[CHRD…

ldconfig及 LD_LIBRARY_PATH

ldconfig及 LD_LIBRARY_PATH 1. 往/lib和/usr/lib里面加东西&#xff0c;是不用修改/etc/ld.so.conf的&#xff0c;但是完了之后要调一下ldconfig&#xff0c;不然这个library会找不到 2.想往上面两个目录以外加东西的时候&#xff0c;一定要修改/etc/ld.so.conf&#xff0c;然…