原创 AcWing217 洛谷P4316 綠豆蛙的歸宿

逆向思維,反向建圖,拓撲排序。 #include <iostream> #include <queue> #include <vector> using namespace std; const int N=1e5+10; struct

原创 POJ2689 Prime Distance

區間質數轉換成區間和數的問題,看到區間只有1e6,所以任務是刪去這個區間內所有合數。  每一個合數n最小質因子不會超過。 首先篩出 (1e5)的所有質數,用他們去篩L到R的所有合數即可。 #include <iostream> #inc

原创 POJ3070

求斐波那契數列第n項。 矩陣乘法裸題。   關於矩陣乘法某個矩陣只有一行或者一列的循環寫法,可以先把三重寫出來 for(int i=0;i<n;i++) for(int j=0;j<n;j++) for(int

原创 POJ2417

多次TLE後終於過了。。。 把if(hash.find(val)!=hash.end())改成if(hash[val])就過了。。。 裸的BSGS算法,甚至省去了很多特判的簡單題。 #include <cstdio> #include

原创 AcWing197階乘分解

N!的最大質因子不超過N。 先質數篩出N以內質數,然後算在N!出現了多少次。 對於質數p,只有質數p的倍數才含p。 至少含有一個p的有個;含有兩個p的有個,但是有一個p已經記在裏了,所以p的個數只加,之後p的n次方都同理。 #inclu

原创 Codeforce 1296 C. Yet Another Walking Robot

給你一個字符串,代表機器人的行動方向,請你刪除這個字符串的一個子串,使機器人終點並不改變,有多個子串滿足條件時,輸出最短的那個。 就是找字符串中機器人軌跡最短的重複。 設置從開始,記錄每一步的座標以及第幾步step扔進一個結構體,排序後統

原创 Codeforces 1303D Fill The Bag

給你一個數n,再給你m個數,這m個數都是2的冪次,可以將2的冪次向下拆成兩個相等的數(降一次冪),問最少拆多少次,使得能直接組成n。 首先把m個數加起來,判斷與n的大小,如果比n小,一定組成不了,否則一定可以組成n 之後把n拆成二進制,用

原创 BZOJ2818 Gcd

轉換成 即可。 先算出歐拉函數,再算出互質對的前綴和pre[n]。 注意除了a=1&&b=1的情況,其它的a!=b算是兩對。(gcd(a,b)與gcd(b,a)) gcd(a,b)=d的個數與gcd(n/d,n/d)=1個數是一樣的。 注

原创 HDU5015 233 Matrix 矩陣乘法

矩陣乘法。 可以觀察出來,每一列往下一列和每一行往下一行遞推都是固定的, 那麼肯定不能把行當狀態矩陣,而,可以把列當成狀態矩陣。一列一列的往前推。對於2333這些的加可以通過,狀態矩陣頭上加上兩個,23和3,即              

原创 Codeforce 1296 E String Coloring

給一個字符串,給字符串所有字符染色,相鄰兩個顏色不同的字符可以交換,問至少需要多少種顏色,可以使得經過任意次數交換之後字符串滿足字典序。 要想一個字符一直交換到它的字典序位置,也就是說他前面字典序比它大的都要跟它顏色不同,這樣這個字符才能

原创 Codeforces 1303A Erasing Zeroes

給一個01串,讓所有的1連在一起。 一開始理解成了不能有單獨的1,以爲00110001100這樣只要沒有單獨的1就行,後來才發現是所有1必須連在一起。 找到最靠前和最靠後的1,統計中間0出現的字數,它們都要被刪去。 #include <

原创 Codeforces 1303C Perfect Keyboard

給你一個字符串,要求你設計一種鍵盤,這個鍵盤用一行表示,其中在題目字符串中相鄰的字符,在你的鍵盤上也要相鄰。 我們用三個數組模擬一個雙向鏈表,pre[i]表示i字符前一個字符,nxt[i]表示i字符後一個字符,vis[i]標記i字符是否在

原创 BZOJ1101 Zap 莫比烏斯函數+數論分塊

BZOJ卡流輸入輸出,把cin,cout改成scanf和printf 就過了。  #include <cstdio> #include <iostream> using namespace std; const int N=1e6+5;

原创 Codeforce 1296 B. Food Buying

你有s元,每花x元  ,你可以得到  的返利。問你最終能花多少錢。   當然是先把整10的花掉,獲得返利,加上之前剩下的,循環,知道手裏的錢<10.   如果不花整10的,比如你有85,你選擇花85,和花80,獲得的返利都是8元,顯然你花

原创 POJ3111 Dinkelbach算法

假定一個答案,根據這個答案,計算 根據排序,此時我們並不是把最大的個相加跟0比較,而是把最大的個的