HDU 4407 Sum(容斥+等差求和)
题目大意:给n个数,1-n。然后有m次操作,分别是求(x,y)中与p互质的和;将第x个数替换成c。
思路:一开始觉得区间操作往线段树上想,但是要存的东西太多,没有办法实现。
后面其实仔细一想跟前面几道题的解决方法差不多,之前求的是互质的个数,现在求的是互质数的和。这样的话其实可以用总数减去不是互质的数。**用等差数列求和来算就可以了。**然后最后再用一个map来存改变的数是否互质,再减去加上就好了。因为数据量不多。
有一个很重要的点是,巨坑,记得但凡数字大一点用longlong的时候都要乘上1ll。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<map>
using namespace std;
typedef long long ll;
const int maxn = 4e5+20;
int prime[maxn];int len = 0;
int gcd(int a, int b)
{return a%b==0? b:gcd(b,a%b);
}void getprime(int n)
{len = 0;for(int j = 2; j*j<=n; j++){if(n % j == 0)prime[len++] = j;while(n%j == 0) n/=j;}if(n>1)prime[len++] = n;
}
ll solve(int x)
{ll ans = 0;for(int i = 1; i<(1<<len); i++){ll temp= 1, cnt = 0;for(int j = 0; j<len; j++){if(i&(1<<j)){temp *= prime[j];cnt++;}}if(cnt %2 == 1){int n = x/temp;//cout<<n<<"?"<<endl;ans += 1ll*(1+n)*n*temp/2;}else{int n = x/temp;ans -= 1ll*(1+n)*n*temp/2;}//cout<<ans<<" !!"<<endl;}return ans;
}
int main()
{int n,m;int t;scanf("%d", &t);while(t--){map<int,int>mp;scanf("%d%d", &n, &m);mp.clear();while(m--){int op,x,y,c;scanf("%d", &op);if(op == 1){scanf("%d%d%d", &x, &y, &c);getprime(c);ll ans = 1ll *(y+x)*(y-x+1)/2;ans = ans - solve(y)+solve(x-1);for(auto iter = mp.begin(); iter!= mp.end(); iter++){ll tempx = (*iter).first, tempy = (*iter).second;if(tempx >=x && tempx<=y){if(gcd(tempx,c) == 1) ans -=tempx;if(gcd(tempy,c) == 1)ans +=tempy;}}printf("%lld\n", ans);}else{scanf("%d%d", &x, &c);mp[x] = c;}}}return 0;
}
HDU 4407 Sum(容斥+等差求和)相关推荐
- HDU 5514 Frogs 容斥
http://acm.hdu.edu.cn/showproblem.php?pid=5514 没有想到怎么利用gcd的性质来改进指数级别的容斥,还是没有理解容斥的思想,只知道基础的. 已经知道结果就在 ...
- HDU 4407 sum 容斥原理
算法: 利用数据1...N的性质,求与P的互质的个数,位运算,容斥定理.. #include<stdio.h> #include<stdlib.h> #include<s ...
- HDU 4407 Sum(容斥原理+状态压缩)
题目链接 容斥原理不会,map不会,状态压缩不会.做毛线... 题目大意:给出1-n,n个数,有两个操作1是询问x-y区间上与p互质的数的和是多少,2是改变x位置上的数为c. 自己确实办不了,map这 ...
- hdu 4407 Sum
http://acm.hdu.edu.cn/showproblem.php?pid=4407 题意:给定初始n个数1..n,两个操作,①1 x y p 询问第x个数到第y个数中与p互质的数的和; ② ...
- HDU 6143 Killer Names(排列+容斥,dp)
Killer Names HDU 6143 (容斥+排列组合,dp+整数快速幂) 2017ACM暑期多校联合训练 - Team 8 1011 Killer Names 题目链接 Time Limit: ...
- 容斥 - HDU 4135 Co-prime
Co-prime Problem's Link: http://acm.hdu.edu.cn/showproblem.php?pid=4135 推荐: 容斥原理 Mean: 给你一个区间[l,r]和 ...
- Sum of the Line UPC5222 (容斥)
莫过一日曝十日寒. 5222: Sum of the Line 时间限制: 1 Sec 内存限制: 128 MB 提交: 212 解决: 61 [提交] [状态] [讨论版] [命题人:admin ...
- hdu 6169 - 容斥
题目链接:点击打开链接 题解思路:这题就是要求K要是质数,且要小于R,要么肯定是0.那么我们还的知道要是K是sqrt(n)以上的质数那么值肯定是它本身,那么我们只需要先把sqrt(10^11)内的质数 ...
- HDU 6052 To my boyfriend(容斥+单调栈)
题意:对于一个n*m的方格,每个格子中都包含一种颜色,求出任意一个矩形包含不同颜色的期望. 思路: 啊啊啊啊啊,补了两天,总算A了这道题了,简直石乐志,前面的容斥还比较好写,后面的那个>13那个 ...
最新文章
- 【opencv】(6) 图像轮廓处理
- 乐鑫esp8266模块MicroPython开发板MQTT物联网人工智能最小系统
- JS callee 的例子
- Golang gorouting 并发控制 sync.WaitGroup 介绍与使用
- 用户参与度与活跃度的区别_用户参与度突然下降
- 蓝宝石显卡bios_狼神矿卡烤机89°C!强刷蓝宝石RX570超白金显卡BIOS降温75°教程...
- Verizon收购雅虎交易完成 硅谷第一美女梅耶尔辞职
- spring3.0学习之环境搭建
- window安全中心关闭防火墙后仍然会将xx文件删除的解决办法
- java word 在线编辑图片,_卓正软件 - PageOffice官方网站 - 在线编辑Word、Excel的Office文档控件...
- 大学计算机基础教程第10章数据通信技术基础
- 主题: 编译工具配置出现的问题总结
- 力扣 两数相加 C语言 题解
- zabbix5部署+Grafana大屏展示
- 艺赛旗(RPA)iS-RPA新手课堂 - 这个“鼠标”得会用
- matlab 函数 平移,MATLAB图线先下平移
- 城市轨道交通信号系统学习笔记(一)信号系统的特点
- 沃森变频器使用说明书_沃森(VicRuns)VD120A-GS系列变频器说明书用户手册.doc
- css中单位px、pt、em和rem的区别
- glibc全局构造与析构(解释了_do_global_ctors_aux)----写的相当不错!!!
热门文章
- 基于51单片机的半导体制冷小冰箱
- 同方威视智能安检为北京大兴国际机场安全护航
- stm32f4xx-GPIO
- JavaCV实现图片人脸检测
- 物联网平台正在涌向系统集成
- 解决:_pickle.UnpicklingError: A load persistent id instruction was encountered,
- PLC控制柜由哪些元件组成?
- UnicodeDecodeError:'utf-8' codec can't decode byte 0x8b in position 1: invalid start byte
- 猪猪猫.CN-HOME XP-SP2[精简安装版]
- vs2010c语言窗口程序,VS2010/MFC编程入门之四十一(文档、视图和框架:分割窗口)...