1. 程式人生 > >2018暑假杭電多校第七場

2018暑假杭電多校第七場

GuGuFishtion (hdu 6390 莫比烏斯反演)

φ((ab)φ(a)φ(b)=gcd(a,b)φ(gcd(a,b))
關於這個公式的化簡。。。看這個
其實就是求:
所有的 gcd=1 的時候的 11φ(1)
所有的 gcd=2 的時候的 21φ(2)
所有的 gcd=3 的時候的 31φ(3)
所有的 gcd=4 的時候的 41φ(4)

而求 gcd=d的個數不就是很經典的莫比烏斯的題麼,我這裡就是

f(d) 表示 gcd=d的個數,F(d) 表示 gcd=d 的倍數的個數

#include"bits/stdc++.h"
using namespace std;
typedef long long LL;
const int maxn=1e6+5;
int MOD=1e9+7;
bool vis[maxn];
int phi[maxn];
int mu[maxn]; 
int Smu[maxn];
int inv[maxn]={1,1};
int T,N,M;
vector<int>prime;
void PHI(int n)
{
    memset
(vis,1,sizeof(vis)); phi[1]=1; mu[1]=1; Smu[1]=1; for(int i=2;i<=n;i++) { if(vis[i]) { prime.push_back(i); phi[i]=i-1; mu[i]=-1; } for(int j=0;j<prime.size()&&i*prime[j]<=n;j++) { vis[i*prime[j]]=0
; if(i%prime[j]==0) { phi[i*prime[j]]=phi[i]*prime[j]; mu[i*prime[j]]=0; break; } else { phi[i*prime[j]]=phi[i]*(prime[j]-1); mu[i*prime[j]]=-mu[i]; } } Smu[i]=Smu[i-1]+mu[i]; } } LL F(int n)//求gcd=n的倍數的個數 { return (LL)(N/n)*(M/n); } LL f(int n)求gcd=n的個數 { LL res=0; for(int i=1,j,d=n;d<=N;i=j+1) { j=min(N/(N/i),(M/(M/i))); res+=(LL)(Smu[j]-Smu[i-1])*F(d); if(res>MOD)res%=MOD; d+=(j-i+1)*n; } return res; } LL ksm(LL a,LL b,LL mod) { LL res=1,base=a; while(b) { if(b&1)res=(res*base)%mod; base=(base*base)%mod; b>>=1; } return res; } int main() { PHI(1e6); cin>>T; while(T--) { cin>>N>>M>>MOD; if(N>M)swap(N,M); LL res=0; for(int i=1;i<=N;i++) { if(i>1)inv[i]=(LL)(MOD-MOD/i)*inv[MOD%i]%MOD; res+=(LL)f(i)*i%MOD*inv[phi[i]]%MOD; if(res>MOD)res%=MOD; } cout<<res<<endl; } }``` #Sequence(hdu 6395 分段矩陣快速冪) 題目連結:http://acm.hdu.edu.cn/showproblem.php?pid=6395 比賽完之後再看這道題,其實也沒有什麼。。。 這道題最關鍵的就是怎麼快速的分段 其實這也是非常常見的手法,在莫比烏斯反演的裸題以及杜教篩什麼的都有: 就是在 $[i,\frac{x}{x/i}]$這段區間內,$\frac{x}{i}$的值是一樣的,而且只有 $sqrt(x)個值$

include”bits/stdc++.h”

using namespace std;
typedef long long LL;
const int MOD=1e9+7;
struct Matrix
{
int n;
LL a[3][3];
Matrix (int n):n(n)
{
for(int i=0;i


#Swordsman(hdu 6396)
題目連結:http://acm.hdu.edu.cn/showproblem.php?pid=6396
題意:就是說有 $n$ 個怪,最多有 $5$ 種屬性,自己也有$5$ 種屬性,要在自己的每種屬性都大於怪的每種屬性的時候,就闊以把怪殺死,並且自己的屬性還會得到對應的提升
問:最多能殺多少怪,以及最後自己的每個屬性的值是多少?

參考部落格:昨天看的今天寫的。。。然後就沒找到這位童鞋的部落格T_T

這道題我參考的這位童鞋的思路感覺非常好懂:
就是先把每個屬性從小到大排序,把比自己小的屬性先記錄下來,用一個 $sum[i]$ 表示第 $i$ 個怪物記錄了多少屬性,然後在看如果某個怪物的 $sum$ 達到了 $K$ 個,那麼就把這個怪物吃了就行了

然後這道題還非要輸入掛,於是又從那位童鞋那裡得到了一個優秀的輸入掛
~~原來以前的 getchar 那種掛是假的掛啊,,,我才知道~~

include”bits/stdc++.h”

define out(x) cout<<#x<<”=”<

define C(n,m) ((long long)fac[(n)]*inv[(m)]%MOD*inv[(n)-(m)]%MOD)

using namespace std;
typedef long long LL;
const int maxn=1e5+5;
const int MOD=1e9+7;

//優秀的輸入掛
namespace fastIO {
#define BUF_SIZE 100000
//fread -> read
bool IOerror = 0;
inline char nc() {
static char buf[BUF_SIZE], *p1 = buf + BUF_SIZE, *pend = buf + BUF_SIZE;
if(p1 == pend) {
p1 = buf;
pend = buf + fread(buf, 1, BUF_SIZE, stdin);
if(pend == p1) {
IOerror = 1;
return -1;
}
}
return *p1++;
}
inline bool blank(char ch) {
return ch == ’ ’ || ch == ‘\n’ || ch == ‘\r’ || ch == ‘\t’;
}
inline void read(int &x) {
char ch;
while(blank(ch = nc()));
if(IOerror) return;
for(x = ch - ‘0’; (ch = nc()) >= ‘0’ && ch <= ‘9’; x = x * 10 + ch - ‘0’);
}
#undef BUF_SIZE
};
//using namespace fastIO;

int N,K;
struct AAA
{
int v,id;
bool operator<(const AAA &t)const
{
return v

相關推薦

2018暑假

GuGuFishtion (hdu 6390 莫比烏斯反演) φ((ab)φ(a)φ(b)=gcd(a,b)φ(gcd(a,b))φ((ab)φ(a)φ(b)=gcd(a,b)φ(gcd(a,b)) 關於這個公式的化簡。。。看這個 其實就是求:

2018暑假

1001-Rikka with Nash Equilibrium(hdu 6415) 題目連結:http://acm.hdu.edu.cn/showproblem.php?pid=6415 題

HDU 6394 Tree 樹分塊或者LCT 2018

Tree Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 380    Accepted Submission(

20171011 Kolakoski(簽到題)HDU 6130

This is Kolakosiki sequence: 1,2,2,1,1,2,1,2,2,1,2,2,1,1,2,1,1,2,2,1……. This sequence consists of 1 and 2, and its first term equals 1. Besides, if you

2018 Multi-University Training Contest 3

整數 其余 for cube cst ace 長度 get 每次 躺了幾天 終於記得來填坑了 1001 Ascending Rating (hdoj 6319) 鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=6319 單調隊列

20181007(凸包,極角排序)

棧模擬 include struct node 距離 然而 bit const 極角 #include<bits/stdc++.h>using namespace std;typedef const long long ll;struct node{ in

2018 Multi-University Training Contest 9

1001 Rikka with Nash Equilibrium 可以dp,也可以找規律 #include<bits/stdc++.h> #define N 100005 #define P pair<int,int> using namespace std

2018

A #include <iostream> #include <cmath> #include <cstring> #include <cstdio> #include <algorithm> #include &

20182018 Multi-University Training Contest 3)

                   2018 Multi-University Training Contest 3 A題題解:每次取長度為m的子區間,找最大值和起點的最長遞增序列。很明顯是一個滑塊區間維護最大值問題,但是正向維護很難處理count的問題,那麼從後往前

HDU 6397 Character Encoding 容斥 2018

Character Encoding Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total Submission(s): 510    Acce

A Ascending Rating

it is xor esc pri main param ack led preview Problem Description Before the start of contest, there are n ICPC contestants waiting in a l

HDU6415 Rikka with Nash Equilibrium dp

lar mon 範圍 font fin guarantee stc occurs wing Rikka with Nash Equilibrium Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 524288

-hdu6397 Character Encoding-組合數+容斥原理

題解:根據題目意思,x1+x2+...+xm = k;0 <= xi <= n-1;即整數分解。 如果xi沒有沒有限制的話,用插板法,相當於k個蘋果被裝入m個籃子中,因此我們需要將k個蘋果分為m-1分,也就是插入m-1塊板子;如果xi > 0,一頭一尾不能插板子,就是向k-1個

k題題意 一天你去打羽毛球  遇見a,b,c,d四種人。 a是白條哥啥都沒有,b只有拍子,c只有球,d有一個拍子一個球。 pop(a+b+c+d)=n  pop是人數  你現在想打羽毛球,從這四種人中任意挑人打比賽,要求至少有兩個拍子一個球,可以任意個人。。。 問在

1003 C. Dynamic Graph Matching(狀壓dp 處理圖匹配計數)

Problem C. Dynamic Graph Matching Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 524288/524288 K (Java/Others) Total Su

6351 Beautiful Now(51002)

Problem Description Anton has a positive integer n, however, it quite looks like a mess, so he wants to make it beautiful after k swaps o

2018hdu hdu6351 Beautiful Now(暴力全排列)

Beautiful Now Time Limit: 5000/2500 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others) Total Submission(s): 1677    Accepted

2013

1006 Magic Pen 6 題目的意思就是給你一串數字,讓你找出其中最長的一個串使得這些數字之和模M等於0: 那就直接先計算出sum(i) = a1+a2+....+ai;一串數字的和就是這串數字的首數字和末尾數字的sum之差,要使得字串 最長,那麼就使用兩個指

三次 Problem A. Ascending Rating(單調佇列)

【題意】 給你一個長為n的陣列a 讓你對於每個長度為m的視窗。 算出其中的最大值以及從左往右遍歷的時候這個最大值更新的次數。 【題解】 單調佇列。 從後往前滑動視窗。 會發現我們維護以這個

6304 Chiaki Sequence Revisited[2018聯賽第一 G](找規律+位運算+逆元)

【題意】 給定一個序列a,定義a[1]=a[2]=1,a[n]=a[n-a[n-1]]+a[n-1-a[n-2]](n>=3),求該序列的前n項和是多少,結果對 1e9+7 取模 【輸入格式】 第一行為資料組數T(T<1e5),下面T行每行