坑。。待填
来源:互联网 发布:淘宝记账软件哪个好 编辑:程序博客网 时间:2024/05/19 16:35
http://acm.hdu.edu.cn/showproblem.php?pid=1031
http://www.cnblogs.com/chanme/p/3861766.html
http://m.blog.csdn.net/blog/tjdrn/9329531
http://blog.csdn.net/xuezhongfenfei/article/details/9822173
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2619
hdu 3571 N-dimensional Sphere 高斯消元
#include <iostream>#include <cstdio>#include <cstring>#include <string>#include <cmath>#include <vector>#include <queue>#include <map>#include <set>#include <stack>#include <algorithm>using namespace std;#define root 1,n,1#define lson l,mid,rt<<1#define rson mid+1,r,rt<<1|1#define lr rt<<1#define rr rt<<1|1typedef long long LL;typedef pair<int,int>pii;#define X first#define Y secondconst int oo = 1e9+7;const double PI = acos(-1.0);const double eps = 1e-6 ;const int N = 55;#define mod 200000000000000003LL //需要的是素数 #define dif 100000000000000000LL //偏移量,使得数都是整数,方便移位乘法 LL Mod(LL x) { //加法取模,防止超__int64 if (x >= mod) return x - mod; return x;}LL mul(LL a, LL b) { //乘法取模,用移位乘法,防止超__int64 LL res; for (res = 0; b; b >>= 1) { if (b & 1) res = Mod(res + a); a = Mod(a + a); } return res;}void e_gcd( LL a , LL b , LL &d , LL &x , LL &y ) { //拓展的欧几里德定理,求ax+by=gcd(a,b)的一个解 if( !b ){ d = a , x = 1 , y = 0 ; return ; } e_gcd( b , a%b , d , y , x ); y -= x*(a/b);}LL inv( LL a , LL n ){ //求逆,用于除法取模 LL d,x,y ; e_gcd(a,n,d,x,y); return ( x % n + n ) % n ;}LL A[N][N] , g[N][N];int n ;void Gauss() { //高斯消元 for( int i = 0 ; i < n ; ++i ) { int r = i ; for( int j = i ; j < n ; ++j ) { if( g[j][i] ) { r = j ; break ; } } if( r != i ) for( int j = 0 ; j <= n ; ++j ) swap( g[i][j] , g[r][j] ) ; LL INV = inv( g[i][i] , mod ); for( int k = i + 1 ; k < n ; ++k ) { if( g[k][i] ) { LL f = mul( g[k][i] , INV );//相当于g[k][i]/g[i][i]%mod; for( int j = i ; j <= n ; ++j ) { g[k][j] -= mul( f , g[i][j] ); g[k][j] = ( g[k][j] % mod + mod ) % mod ; } } } } for( int i = n - 1 ; i >= 0 ; --i ){ for( int j = i + 1 ; j < n ; ++j ){ g[i][n] -= mul( g[j][n] , g[i][j] ) , g[i][n] += mod , g[i][n] %= mod ; } g[i][n] = mul( g[i][n] , inv( g[i][i] , mod ) ); }}void Run() { scanf("%d",&n); memset( g , 0 , sizeof g ); for( int i = 0 ; i <= n ; ++i ) { for( int j = 0 ; j < n ; ++j ) { scanf("%I64d",&A[i][j]); A[i][j] += dif ; //偏移diff } } for( int i = 0 ; i < n ; ++i ){ for( int j = 0 ; j < n ; ++j ){ g[i][j] = Mod( A[n][j] - A[i][j] + mod ); g[i][j] = mul( g[i][j] , 2 ) ; g[i][n] = Mod( g[i][n] + mul( A[n][j] , A[n][j] ) ); g[i][n] = Mod( g[i][n] - mul( A[i][j] , A[i][j] ) + mod ); } } Gauss(); printf("%I64d",g[0][n]-dif); //减去先前偏移的值 for( int i = 1 ; i < n ; ++i ){ printf(" %I64d",g[i][n]-dif); }puts("");}int main(){ int cas = 1 , _ ; scanf("%d",&_ ); while( _-- ){ printf("Case %d:\n",cas++); Run(); }}
- //扩展欧几里德算法
- int ExGCD(int a, int b, int& x, int& y)
- {
- if(b == 0)
- {
- x = 1, y = 0;
- return a;
- }
- int d = ExGCD(b, a%b, x, y);
- int temp = x;
- x = y;
- y = temp - a/b*y;
- return d;
- }
- int main()
- {
- int x, y, d;
- d = ExGCD(99, 78, x, y);
- cout << d << " " << x << " " << y << endl;
- return 0;
- }
- //定理一: 如果a,b是不都为0的任意整数,则d=gcd(a,b)是a,b的线性组合{ax+by: x,y∈Z}的最小元素.
- // 已知d=gcd(a,b)=gcd(b,a mod b)
- //
- //由gcd(b,a mod b)得知,d = bx + a mod b = bx + (a-floor(a/b)*b)*y = a*y + b(x-floor(a/b)*y)
- //当推到gcd(a,b)时,d′ = d = a*y + b(x-floor(a/b)*y)
0 0
- 坑。。待填
- 空缺,待填。
- 挖坑待填
- 挖坑待填
- SRM448(500待填)
- SRM449(500待填)
- 信号(待填)
- 数据模型(待填)
- 挖坑待填
- 挖坑待填
- Jzoj4614 字符串(待填)
- boost::program_options挖坑待填
- boost::filesystem挖坑待填
- Jzoj4594 Dynamic len (待填)
- Jzoj4731 游戏(待填)
- 笔记。挖坑。待填。面试注意事项
- 奇怪的错误 挖坑待填
- erlang 游戏目录结构 (大坑待填)
- 算法与李开复
- platform_set_drvdata的作用
- mimetype
- React:引领未来的用户界面开发框架
- 学习笔记之Lambda 表达式(C# 编程指南)
- 坑。。待填
- 安装php5
- DataInputStream的过期方法readLine()
- js_day3
- Android下载repo文件报错
- Shell脚本实现每个工作日定时执行指定程序(学习记录)
- 在Github和Git上fork之简单指南
- GUN学习笔记之make变量
- 医疗博文锚文本