bzoj4807 車
题目大意:
Description
Input
Output
Sample Input
Sample Output
Solution
Code
/**************************************************************
Problem: 4807
User: 20011023
Language: C++
Result: Accepted
Time:1332 ms
Memory:17892 kb
****************************************************************/ #include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=+;
const ll mod=1e10;
int n,m;
int k;
int exi[N];
int ans;
int yue[N],has[N],cnt;
int pri[N],tot;
bool vis[N];
void sieve(){
for(int i=;i<=n;i++){
if(!vis[i]){
pri[++tot]=i;
}
for(int j=;j<=tot;j++){
if(pri[j]*i>n) break;
vis[pri[j]*i]=;
if(i%pri[j]==) break;
}
}
}
void div1(int x){
for(int i=;pri[i]*pri[i]<=x;i++){
while(x%pri[i]==){
exi[i]++;
x/=pri[i];
}
}
if(x>){
int k=lower_bound(pri+,pri+tot+,x)-pri;
exi[k]++;
}
}
int div2(int x){
int now=x;
for(int i=;pri[i]*pri[i]<=x;i++){
if(now%pri[i]==){
while(now%pri[i]==){
if(exi[i]){
exi[i]--;
x/=pri[i];}
now/=pri[i];
}
}
}
if(now>){
int k=lower_bound(pri+,pri+tot+,now)-pri;
if(exi[k]){
exi[k]--;
x/=pri[k];
}
}
return x;
}
struct big{
ll a[];
int cnt;
void pre(){
cnt=,a[]=;
}
void mul(const ll &x){
int ji=;
for(int i=;i<=cnt;i++){
a[i]=a[i]*x+ji;
ji=a[i]/mod;
a[i]%=mod;
}
if(ji){
a[++cnt]=ji;
}
if(cnt>) cnt=;
}
void op(){
while(a[cnt]==&&cnt>) cnt--;
printf("%lld",a[cnt--]);
while(cnt)printf("%010lld",a[cnt--]);
}
}A;
void wrk(){
A.pre();
for(int i=m+;i<=n;i++){
int re=div2(i);
A.mul(re);
}
}
int main()
{
scanf("%d%d",&n,&m);
if(m>n) swap(n,m);
if(n==m){
printf("");return ;
}
else if(n==){
printf("%d",m);return ;
}
else if(m==){
printf("%d",n);return ;
}
sieve();
for(int i=;i<=n-m;i++){
div1(i);
}
wrk();
A.op();
return ;
}
Conclusion
质因数分解往往可以起到意想不到的优化,因为一个数的分解呈现了它的本质。
决定了一切的乘除,gcd,找因数等运算。
1.乘除,本质上是质因子次数的加减。
2.gcd本质上是所有质因子次数取min再相乘。lcm则取max
3.因数的产生本质上是一个乘法原理。质因子次数的选择也决定了因数的数值。
并且,处理一些gcd问题时,质因数分解的考虑方式也值得去尝试。
bzoj4807 車的更多相关文章
- BZOJ4807:車(组合数学,高精度)
Description 众所周知,車是中国象棋中最厉害的一子之一,它能吃到同一行或同一列中的其他棋子.車跟車显然不能在一起打起来,于是rly一天又借来了许多许多的車在棋盘上摆了起来……他想知道,在N× ...
- Python 基礎 - 元組與簡易購物車實做
tuple(元組) 其實跟列表差不多,也是存一組數,只不過是它一旦建立了,就不能修改了,只能做 切片 跟 查詢,所以只叫 只讀列表 語法: name = ("Rogers", &q ...
- CH6802 車的放置 和 CH6B24 Place the Robots
6802 車的放置 0x60「图论」例题 描述 给定一个N行M列的棋盘,已知某些格子禁止放置.问棋盘上最多能放多少个不能互相攻击的車.車放在格子里,攻击范围与中国象棋的"車"一致. ...
- AcWing P373 車的放置
Analysis 这道题是二分图匹配,设可以放車的的地方的坐标为(i,j),则连一条i到j的有向边(注意是有向边),然后再跑匈牙利算法就好了.时间复杂度是O(nm(n+m)),在1≤n,m≤200的情 ...
- 車(rook)
[题目分析] JustPenz:我们假设n>m(不大于就交换),那最多能摆m个,所以会有(n-m)个空白,我们把这些空白插入到n中,答案就是C(n,n-m)=C(n,m);数据范围比较大,我们就 ...
- GT sport真实赛道详解 - Brands Hatch | 伯蘭士赫治GP賽車場
参考:GT sport所有赛道简介 GT Sport - Tip/Guide For FASTER LAP TIMES (Brands Hatch) 赛道介绍.跑法.赛事网上都有大把的视频. GT s ...
- CH6802 車的放置
原题链接 和棋盘覆盖(题解)差不多. 将行和列看成\(n+m\)个节点,且分属两个集合,如果某个节点没有被禁止,则行坐标对应节点向列坐标对应节点连边,然后就是求二分图最大匹配了. #include&l ...
- [題解](最小生成樹/LCA)luogu_P1967貨車運輸
一道好題不出所料又抄的題解 1.首先對於這張圖肯定要考慮走哪些邊不走哪些邊,發現我們想要的肯定那些邊權最大的邊,所以想到最大生成樹 這樣能保證選到盡量大的邊 2.跑完最大生成樹后每兩點之間就有唯一路徑 ...
- 【2018.9.20】JOI 2017 Final T2「準急電車 / Semiexpress」
题目描述 JOI 铁路公司是 JOI 国唯一的铁路公司. 在某条铁路沿线共有 $N$ 座车站,依次编号为 $1...N$. 目前,正在服役的车次按照运行速度可分为两类:高速电车(简称快车)与普通电车( ...
随机推荐
- C# online update demo
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.W ...
- test zhenai
web.Document.InvokeScript("eval",new string[]{"document.getElementById('passwordbt'). ...
- Exp7:网络欺诈防范
Exp7:网络欺诈防范 基础问题回答 通常在什么场景下容易受到DNS spoof攻击? 答:同一局域网下,以及各种公共网络. 在日常生活工作中如何防范以上两攻击方法? 答: 使用最新版本的DNS服务器 ...
- 2017-2018-2 20155230《网络对抗技术》实验9:Web安全基础
实践过程记录 下载wegot并配置好java环境后 输入java -jar webgoat-container-7.0-SNAPSHOT-war-exec.jar 在浏览器输入localhost:80 ...
- Exp7 网络欺诈技术防范
Exp7 网络欺诈技术防范 基础问题回答 1.通常在什么场景下容易受到DNS spoof攻击? 在同一局域网下比较容易受到DNS spoof攻击,攻击者可以冒充域名服务器,来发送伪造的数据包,从而修改 ...
- Unused Method(不再使用的方法)——Dead Code(死亡代码)
系列文章目录: 使用Fortify进行代码静态分析(系列文章) Unused Method(不再使用的方法) 示例: private bool checkLevel(strin ...
- 3、class文件加载过程
1.加载2.链接(检验/准备/解析) 1/检验过程:检验class的数据格式.2/准备过程:创建静态域,并将这些域设为默认值.3/解析过程:在一个Java类中会包含对其它.类或接口的形式引用,包括它的 ...
- scala学习——(1)scala基础(上)
scala> val x = 1 x: Int = 1 一.值与变量 值(val):赋值后不可变 val值名称:类型 = XXX 变量(var):赋值后可以改变 var变量名称:类型 = XX ...
- 数位DP模板详解
// pos = 当前处理的位置(一般从高位到低位) // pre = 上一个位的数字(更高的那一位) // status = 要达到的状态,如果为1则可以认为找到了答案,到时候用来返回, // 给计 ...
- 浅析java构造函数前的访问限定符问题
曾经一直有个问题困扰着我,我一直以为构造函数前面不能加任何东西,但偶然间看到了一本书上写的代码中,构造函数前加了public限定符,心里很是疑惑,构造函数前加毛访问限定符啊??! 在网上查了很多资料 ...