![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数论
多一些不为什么的坚持
qq:1216161552
展开
-
51Nod 1024 矩阵中不重复的元素
涨姿势了a^b这种类型进行比较或者存储取对数#include #include #include #include #include#include #includeusing namespace std; const long long INF=1e18;int main(){ int n,m,a,b; cin>>m>>n>>a>>b; set s;原创 2017-11-28 21:44:22 · 194 阅读 · 0 评论 -
51Nod 1098 最小方差 排序
题解传送门里面写到了方差的展开,把O(n*m)优化到了O(n)前缀和!!!!!注意要把INF写的大一点#include #include #include #include #include #include #include#includeusing namespace std;int main(){ int n,m; scanf("%d%d",原创 2017-12-14 20:58:00 · 274 阅读 · 1 评论 -
51Nod 1305 Pairwise Sum and Divide
这题看了讨论区的说就与1和2有关自己真欠缺思考。如果两个数a,b不为1或者2 。a+b/(a*b)=0如果取一个1和一个不为1的,a+b/(a*b)=1取两个1,a+b/(a*b)=2取两个2,a+b/(a*b)=1然后只要保存1和2的个数就行#include #include #include #include #include #include原创 2017-11-26 23:05:13 · 126 阅读 · 0 评论 -
51Nod 1138 连续整数的和
把n项连续的求和公式写出来 n=len*a1+len*(len-1)/2 len代表长度变形一下。len最大取sqrt(2*n) 然后遍历求a1#include #include #include #include #include#include #include#include#includeusing namespace std;int main(){原创 2017-12-05 20:54:00 · 201 阅读 · 0 评论 -
51Nod 1096 距离之和最小
排序找中位数#include #include #include #include #include#include #include#include#includeusing namespace std;int main(){ int n; scanf("%d",&n); int a[10001]; for(int i=0;i<n;i++){ scan原创 2017-12-13 16:42:46 · 244 阅读 · 0 评论 -
51Nod 1013 3的幂的和 快速幂
等比数列求和,然后快速幂(a/b)%mod=a*b^(mod-2)%mod#include #include #include #include #include#include #include#include#includeusing namespace std;int mod=1000000007;long long ksm(int len,int x)原创 2017-12-12 19:53:06 · 210 阅读 · 0 评论 -
51Nod 1596 搬货物 二进制
思路就是二进制把所有的数累加起来,然后看二进制有多少个1转换一下,因为2^1e6很大,存不下,可以用数组记录二进制的大小然后对数组进行二进制加法。求出来最后1的个数例如 样例a[1]=2 a[2]=1 a[3]=2然后二进制加法计算 a[1]=0,a[2]=0.a[3]=1,a[4]=0;a[5]=1;对应相加:2^3+2^5=24 就是输入的和判断二进制中1的个数原创 2017-12-11 20:50:43 · 179 阅读 · 2 评论 -
51Nod 1433 0和5 倍数
类似于3的倍数。9的倍数,各项加起来一定是9的倍数10的倍数,肯定有0所以只要把5的个数记录下来,遍历。判断几个5相加能组成9的倍数然后必须有个0.最后输出就好#include #include #include #include #include#include #include#include#includeusing namespac原创 2017-12-11 19:08:40 · 218 阅读 · 0 评论 -
51Nnod 1050 循环数组最大子段和
分两种情况。1 不循环,就是按照0--n-1遍历找最大和2 循环。那么区间肯定是过了起点然后总和减去这个最小字段和。判断两种情况的大小#include #include #include #include #include#include #includeusing namespace std; const int mod=1e9+7;i原创 2017-11-30 16:59:09 · 167 阅读 · 0 评论 -
51Nod 1031 骨牌覆盖
#include #include #include #include #include#include #includeusing namespace std; const int mod=1e9+7;int main(){ int n; int a[1010]={0}; a[0]=a[1]=1; cin>>n; for(int i=2;i<=n;i++)原创 2017-11-30 16:18:02 · 163 阅读 · 0 评论 -
51Nod 1352 集合计数 (扩展欧几里得求方程解的个数)
打字不方便,还是写字吧!#include#include#include#include #includeusing namespace std;long long ex_gcd(long long a,long long b,long long &x,long long &y){ if(b==0){ x=1; y=0; return a; } long原创 2018-01-29 16:49:46 · 200 阅读 · 0 评论