
基础算法
lkbsbird
这个作者很懒,什么都没留下…
展开
-
生成1-N的全排列
import java.util.*; class SortLine { static Scanner scan=new Scanner(System.in);public static void print_permutation(int n,int[] A,int cur) { int i,j; if(cur==n) { for(i=0;i<n;i++) System.out.pr原创 2016-07-01 17:33:27 · 491 阅读 · 0 评论 -
欧几里德和扩展欧几里德
#include #include #include #include using namespace std; const int maxn=1009; //欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数。 //基本算法:设a=qb+r,其中a,b,q,r都是整数, //则gcd(a,b)=gcd(b,r),即gcd(a,b)=gcd(b,a%b)。 //递归 int gcd(转载 2016-07-22 08:40:17 · 231 阅读 · 0 评论 -
hdu 1019
题意:求M个数 的最小公倍数 #include #include #include using namespace std; const int maxn=1000009; long long g[maxn]; int n; int m; long long gcd(long long a,long long b) { return b ? gcd(b,a%b):a; } int mai原创 2016-07-21 09:41:42 · 264 阅读 · 0 评论 -
最长回文子串
#include #include #include using namespace std; const int maxn=1000009; char str[maxn],ste[maxn*2]; int p[maxn*2]; int main() { int n; scanf("%d",&n); while(n--) { int i,len原创 2016-07-09 12:25:34 · 195 阅读 · 0 评论 -
不用加号的数字运算
原理:我们是处于10进制的世界,而计算机则是二进制,下面的方式:主要是运用异或与运算,来计算。#include int add(int n1, int n2) { if( n2 == 0 ) { return n1; } int numor = n1 ^ n2; int overBit = (n1 & n2)原创 2016-07-08 11:01:05 · 491 阅读 · 0 评论 -
字符串模拟大数相加
#include #include #include #include using namespace std; const int maxn=100009; char s1[maxn]; char s2[maxn]; char temp1[maxn]; char temp2[maxn]; char sum[maxn+2]; int main() { int t; scanf("%原创 2016-07-07 21:53:23 · 297 阅读 · 0 评论 -
大数运算
#include #include #include #include #include using namespace std; //两个大数相加 string sum(string s1,string s2) { if(s1.length()<s2.length()) { string temp=s1; s1=s2; s2=temp; } int i,j; for(i=s原创 2016-07-18 15:15:21 · 208 阅读 · 0 评论 -
高精度
1,适用于那些数据较大的运算,解决数据溢出的现象 2,方法:用数组来存数,模拟手算的方法进行四则运算。 3,可以定义,int型,char型。 例如:计算n的阶乘 #include“stdio.h" #include "string.h" const int maxn=3000; int f[maxn]; int main() { int i,j,n; while(scanf(“%d",&原创 2016-07-01 18:31:26 · 157 阅读 · 0 评论 -
输入正整数k,找到所有的正整数x>=y,使得1/k=1/x + 1/y; 样例输入: 2 12 样例输出: 2 1/2 = 1/6 + 1/3 1/
import java.util.*;class Fenshu { static Scanner scan=new Scanner(System.in); public static void main(String[] args) { int k; int x,y; int maxn=10000; int[] a=new int[maxn]; int[] b=new int[maxn];原创 2016-07-01 18:14:38 · 4619 阅读 · 0 评论 -
输入正整数n,按从小到大的顺序输出所有形如abcde / fghij = n的表达式,其中a~j恰好为0~9的一个排列,2
import java.util.*; class Modsort { static Scanner scan=new Scanner(System.in); public static boolean isOk(int x,int y) { int[] a=new int[10]; a[0]=0; for(int i=0;i<5;i++) { a[x%10]++; x/=10; } for(i原创 2016-07-01 18:12:14 · 9111 阅读 · 1 评论 -
hdu 5666
题意:求x+y=q与坐标轴围成的三角形中,有多少个整数点坐标(不包括边界) 解析:注意数据很大,要用到快速乘 #include #include #include #include using namespace std; typedef long long ll; long long q,p; int t; ll qmul(ll a,ll b,ll m) { ll ans=0;原创 2016-07-22 11:20:08 · 262 阅读 · 0 评论