
数论
多一些不为什么的坚持
qq:1216161552
展开
-
51Nod 1024 矩阵中不重复的元素
涨姿势了 a^b这种类型进行比较或者存储取对数 #include #include #include #include #include #include #include using 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 · 217 阅读 · 0 评论 -
51Nod 1098 最小方差 排序
题解传送门 里面写到了方差的展开,把O(n*m)优化到了O(n) 前缀和!!!!! 注意要把INF写的大一点 #include #include #include #include #include #include #include #include using namespace std; int main(){ int n,m; scanf("%d%d",原创 2017-12-14 20:58:00 · 299 阅读 · 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 · 152 阅读 · 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 #include using namespace std; int main(){原创 2017-12-05 20:54:00 · 243 阅读 · 0 评论 -
51Nod 1096 距离之和最小
排序找中位数 #include #include #include #include #include #include #include #include #include using 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 · 261 阅读 · 0 评论 -
51Nod 1013 3的幂的和 快速幂
等比数列求和,然后快速幂 (a/b)%mod=a*b^(mod-2)%mod #include #include #include #include #include #include #include #include #include using namespace std; int mod=1000000007; long long ksm(int len,int x)原创 2017-12-12 19:53:06 · 231 阅读 · 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 · 202 阅读 · 2 评论 -
51Nod 1433 0和5 倍数
类似于3的倍数。 9的倍数,各项加起来一定是9的倍数 10的倍数,肯定有0 所以只要把5的个数记录下来,遍历。判断几个5相加能组成9的倍数 然后必须有个0. 最后输出就好 #include #include #include #include #include #include #include #include #include using namespac原创 2017-12-11 19:08:40 · 246 阅读 · 0 评论 -
51Nnod 1050 循环数组最大子段和
分两种情况。 1 不循环,就是按照0--n-1遍历找最大和 2 循环。那么区间肯定是过了起点 然后总和减去这个最小字段和。 判断两种情况的大小 #include #include #include #include #include #include #include using namespace std; const int mod=1e9+7; i原创 2017-11-30 16:59:09 · 188 阅读 · 0 评论 -
51Nod 1031 骨牌覆盖
#include #include #include #include #include #include #include using 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 · 182 阅读 · 0 评论 -
51Nod 1352 集合计数 (扩展欧几里得求方程解的个数)
打字不方便,还是写字吧! #include #include #include #include #include using 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 · 230 阅读 · 0 评论