Loading

随笔分类 -  算法

摘要:最小堆、向下调整 void siftdown(int i) { int flag=0,t; while(i*2<=n&&!flag) { if(h[[ii]>h[i*2]) t=i*2; else t=i; if(i*2+1<=n) { if(h[t]>h[i*2+1]) t=i*2+1; } if 阅读全文
posted @ 2019-09-20 23:46 qinuna 阅读(160) 评论(0) 推荐(0)
摘要:S(1) = {"COFFEE"} S(2) = {"CHICKEN"}S(n) = S(n-2) :: S(n-1) 1 ≤ n ≤500,1 ≤ k ≤ min{∣S(n)∣,1012 } 给n和k 求出S(n)从第k位开始往后的10的字符 递归定位,枚举10个位 #include <bits/ 阅读全文
posted @ 2019-09-20 13:21 qinuna 阅读(231) 评论(0) 推荐(0)
摘要:#include <bits/stdc++.h> using namespace std; int n,pl; double a[1001][1001]; int main() { cin>>n; for(int i=1;i<=n;i++) for(int j=1;j<=n+1;j++) cin>> 阅读全文
posted @ 2019-09-17 16:43 qinuna 阅读(134) 评论(0) 推荐(0)
摘要:ll ksc(ll a,ll b,ll mod) { a%=mod,b%=mod; ll ret=a*b-(ll)((long double)a*b/mod+0.5)*mod; return ret<0?ret+mod:ret; } 阅读全文
posted @ 2019-09-13 16:45 qinuna 阅读(99) 评论(0) 推荐(0)
摘要:DFS 求1到n的最短路径 vis[1]=1; dfs(1,0); void dfs(int cur,int dis) { if(dis>mini) return ; if(cur==n) { mini=min(mini,dis); return ; } for(int i=1;i<=n;i++) 阅读全文
posted @ 2019-09-10 22:12 qinuna 阅读(147) 评论(0) 推荐(0)
摘要:逆元:在mod意义下,不能直接除以一个数,而要乘以它的逆元 a*b≡1(mod p) ,a,b互为模n意义下的逆元 一个数有逆元的充分必要条件是gcd(a,mod)=1 ( a + b ) % p = ( a % p + b % p ) % p ; (正确) ( a - b ) % p = ( a 阅读全文
posted @ 2019-08-19 14:58 qinuna 阅读(271) 评论(0) 推荐(0)
摘要:欧拉函数:求小于等于n的数中与n互质的数的数量 求欧拉函数值: ll euler(ll x) { ll ans=x; for(int i=2;i*i<=x;i++) { if(x%i==0) { ans=(ans/i)*(i-1); while(x%i==0) x/=i; } } if(x>1) a 阅读全文
posted @ 2019-08-19 14:11 qinuna 阅读(137) 评论(0) 推荐(0)
摘要:给定长度为n的字符串S,构造一个字典序最小的字符串T 操作: 1:从S的头部删除一个字符加到T尾部 2:从S的尾部删除一个字符加到T尾部 前后比较,如果前后相同,比较S与反转后的SS 如果S小,把S的开头加进去 如果SS小,把S的尾部加进去 例题:http://poj.org/problem?id= 阅读全文
posted @ 2019-08-18 15:32 qinuna 阅读(203) 评论(0) 推荐(0)
摘要:树状数组:二进制的应用 与线段树的区别:树状数组的问题都可以用线段树解决,树状数组系数少,效率高 修改、查询复杂度:O(lon N) 单点更新、区间查询: C[1]=C[0001]=A[1] C[2]=C[0010]=A[1]+A[2] C[3]=C[0011]=A[3] C[4]=C[0100]= 阅读全文
posted @ 2019-08-18 12:39 qinuna 阅读(143) 评论(0) 推荐(0)
摘要:卡特兰数是一种经典的组合数,前几项为: 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796,58786, 208012, 742900, 2674440, 9694845, 35357670, 129644790, 477638700, 1767263190,  阅读全文
posted @ 2019-08-14 21:23 qinuna 阅读(211) 评论(0) 推荐(0)
摘要:给你一个序列s = {a1,a2……an},然后可以任意交换其中两个元素 i , j 的位置,代价是ai + aj,把序列变成有序,求最小代价 思路:置换群的巧妙应用 以4 3 2 7 1 6 5为例画图 有三个环 4->7->5->1->4 3->2->3 6->6 要求代价最小,则通过用环里的最 阅读全文
posted @ 2019-08-14 15:47 qinuna 阅读(394) 评论(0) 推荐(0)
摘要:由递归函数画出 1:将给点线段(p1,p2)三等分 2:以三等分点s、t为顶点做出正三角形(s,u,t) 3:对线段(p1,s)、(s,u)、(u,t)、(t,p2)递归重复上述操作 #include <iostream> #include <cmath> #include <cstdio> usi 阅读全文
posted @ 2019-08-06 12:01 qinuna 阅读(1553) 评论(0) 推荐(0)
摘要:计算任意一天是星期几 W=[C/4]-2C+Y+[Y/4]+[13×(M+1)/5]+D-1 C:年份头两位,即世纪数-1 Y:年份后两位 M:范围为3到14 (13是下一年的一月)比如:2003年1月1日要看作2002年的13月1日来计算 D:日 W:星期 mod7 得几就是星期几 得0为星期日 阅读全文
posted @ 2019-08-06 10:40 qinuna 阅读(210) 评论(0) 推荐(0)
摘要:建立一个结构体,内含构造函数 struct point { int x,y; // =0 表示默认值为0 如果没有指定参数的值 就按0处理 point(int x=0,int y=0):x(x),y(y) {} // x(x):x的值初始化为x }; 另一种写法 point(int x=0,int 阅读全文
posted @ 2019-07-28 20:58 qinuna 阅读(204) 评论(0) 推荐(0)
摘要:顺序容器:向量vector、列表list、队列deque 关联容器:集合map、映射set、多重集合multimap、多重映射multiset 容器适配器:栈stack、队列queue、优先队列priority_queue 队列 queue<int>q; q.back(); q.front(); q 阅读全文
posted @ 2019-05-13 16:42 qinuna 阅读(153) 评论(0) 推荐(0)
摘要:a+k与b+k的最小公倍数 求k最小 lcm=a∗b/gcd gcd(a,b)=gcd(a,b-a) a和b加上k之后产生的最大公因数必然是a-b的因子 求差值 枚举差值的所有因子 #include<bits/stdc++.h> using namespace std; typedef long l 阅读全文
posted @ 2019-04-30 17:35 qinuna 阅读(176) 评论(0) 推荐(0)
摘要:自3月中旬被通知要被派去参加19年的天梯赛,一直都是一种忐忑的心情。对于模拟题我做的很少,而天梯赛又以模拟居多。真的是去丢人的。。。 3月30日,早上开赛,前一天晚上跟吴队友聊天聊到2点多,7点钟早早起床来。10点去深职院的图书馆集合、拍照。不得不说,深职院的酒店是真的漂亮,但饭菜真的不想说。。。拍 阅读全文
posted @ 2019-03-30 23:56 qinuna 阅读(169) 评论(0) 推荐(0)
摘要:时间复杂度 O(log n) 高效率计算矩阵的高次方 原理:矩阵乘法的结合律 比如:A*A*A*A*A*A ==> (A*A)*(A*A)*(A*A) 要做到减少重复计算,即充分利用现有的计算结果,考虑使用二分 求A^19次时,使用二进制把问题离散化,转为求(A16)*(A2)*(A) 矩阵快速幂模 阅读全文
posted @ 2019-03-27 13:03 qinuna 阅读(280) 评论(0) 推荐(0)