基础算法
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 · 434 阅读 · 0 评论 -
欧几里德和扩展欧几里德
#include#include#include#includeusing 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 · 207 阅读 · 0 评论 -
hdu 1019
题意:求M个数 的最小公倍数#include#include#includeusing 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 · 234 阅读 · 0 评论 -
最长回文子串
#include#include#includeusing 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 · 169 阅读 · 0 评论 -
不用加号的数字运算
原理:我们是处于10进制的世界,而计算机则是二进制,下面的方式:主要是运用异或与运算,来计算。#includeint add(int n1, int n2){ if( n2 == 0 ) { return n1; } int numor = n1 ^ n2; int overBit = (n1 & n2)原创 2016-07-08 11:01:05 · 455 阅读 · 0 评论 -
字符串模拟大数相加
#include#include#include#includeusing 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 · 269 阅读 · 0 评论 -
大数运算
#include#include#include#include#includeusing 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 · 180 阅读 · 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 · 137 阅读 · 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 · 4466 阅读 · 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 · 8967 阅读 · 1 评论 -
hdu 5666
题意:求x+y=q与坐标轴围成的三角形中,有多少个整数点坐标(不包括边界)解析:注意数据很大,要用到快速乘#include#include#include#includeusing 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 · 230 阅读 · 0 评论