發表文章

目前顯示的是 2月, 2019的文章

TIOJ[1152] 1.銀河帝國旅行社

題目連結: https://tioj.ck.tp.edu.tw/problems/1152 "樹直徑"定義:一顆樹上任兩點距離最大 這是一題裸裸的樹直徑題,不難發現dfs一次找到最遠點,再用那個點當作第二次dfs的根,再找一次最遠點,不外乎就是樹直徑(很greedy的想法(?)。 PS:我的code超爛,ranklist超後面QAQ #pragma GCC optimize("O2") #include<bits/stdc++.h> #define jizz ios_base::sync_with_stdio(false),cin.tie(NULL) #define int long long int #define pb push_back #define po pop_back #define F first #define S second #define CN cout<<"\n" #define MAXN 1000005 #define lson int lson=index*2 #define rson int rson=index*2+1 #define mid int mid=(l+r)/2 using namespace std; vector < int > v[ 10005 ]; int vis[ 10005 ],ans_p = 0 ,ans_s = 0 ,root; void init( int n) { fill(vis,vis + n, 0 ); } void dfs( int now, int sum) { for ( auto x : v[now]) { if (vis[x] == 0 ) { vis[x] = 1 ; dfs(x,sum + 1 ); } } if (sum > ans_s) { ans_p = now; ans_s = sum;

[NTHU]10322 - PC - 費式數列與矩陣快速冪

題目連結: https://acm.cs.nthu.edu.tw/problem/10322/ 一題矩陣快速冪裸題(題目就表明(?) 當然是好好地把矩陣的乘法定義定好,注意一些0/1擺放的細節,把其套上快速冪的模板,就大功告成了。>< #pragma GCC optimize("O2") #include<bits/stdc++.h> #define int long long int #define jizz ios_base::sync_with_stdio(false) , cin.tie(NULL) , cout.tie(NULL); #define pb push_back #define po pop_back; #define F first #define S second #define CN cout<<"\n" #define m 100000007 using namespace std; typedef array < array < int , 2 > , 2 > Matrix; Matrix operator * (Matrix A , Matrix B) { Matrix C; for ( int i = 0 ;i < 2 ;i ++ ) { for ( int j = 0 ;j < 2 ;j ++ ) { C[i][j] = 0 ; for ( int k = 0 ;k < 2 ;k ++ ) C[i][j] = (C[i][j] % m + (A[i][k] % m * B[k][j] % m) % m) % m; } } return C; } Matrix power(Matrix A, int n) { Matrix ans = {{{ 1 , 0 },{ 0 , 1 }}}; while (n) {