應該用線段樹寫,我是塊狀鍊錶水過了
#include#include#include#includeusing namespace std;
typedef long long ll;
const int n=320*320;
struct query
q[n];
int a[n],sz[n],n;
ll sum[320][5];
int main()
printf("%d\n",sap.sap(s,n+d,n*2));
}return 0;
}
c counting formations (
hdu 4290
)先求出g(g(g(n)))每一層的迴圈節
#includeusing namespace std;
int main()
cout<
記迴圈節為a=222222224,b=183120,c=240.
則g(g(g(n)))%mod=g(g(g(n%c)%b)%a)%mod,再利用矩陣二分算一下即可:
#include#includeusing namespace std;
typedef long long ll;
struct mat
mat mul(mat &b,int mod)
mat cal(int n,int mod)
return *this=c;
}};
int g(int n,int mod)
int main()
return 0;
}
①由乙個數組成,
由抽屜原理可知
長度一定不超過n,否則會存在長度為a時與長度為b時對n取模結果相同,即迴圈節為b-a+1,且迴圈中存在某個數%n==0
②由兩個數組成,一定可以。
對任意n,則長度1-n且全為1的數中一定存在兩個長度i,j的數對n取模相同,現在用較大的數減去較小的數,則結果為111111000000,由兩個數組成。
對於每次計算,只需要用pre[k]指向第一次k=x%n對應的x。現在只要保證第一次搜到k時對應的x最小,那麼每次從pre[0]一直找到pre[w]=-1,對應就是答案。
#include#include#includeusing namespace std;
const int n=10010;
int q[n],pre[n],val[n];
bool vis[n];
char s[n],ss[n];
void bfs(int x,int y,int n,int k)
if(!vis[tmp=(np*k+x)%n]) q[++up]=tmp,pre[tmp]=np,val[tmp]=x,vis[tmp]=1;
if(!vis[tmp=(np*k+y)%n]) q[++up]=tmp,pre[tmp]=np,val[tmp]=y,vis[tmp]=1;
}return;
} int main()
return 0;
}
j one and one story (
hdu 4297
)
2012杭州網路賽賽後 缺ACDI
a boomerang hdu 4410 最小費用流,建 inf邊保證n個點都被訪問到 include include includeusing namespace std const int n 222,m 111111 const int inf 0x3f3f3f3f mincostmaxflo...
11年成都網路賽
今天把去年成都的網路賽做了一下,去年是一題不會哇,現在也挺吃力,還有幾題不會,有空再來看 attack 樹狀陣列,這題樹狀陣列節點n記錄的是wall n 和wall n 1 被炮擊的差 include include include includeusing namespace std define...
hdu 4288 2012成都網路賽
線段樹學的遠遠不夠啊,網路賽的時候一直不知道怎麼做,後來看了大神報告,才學了一下。線段樹每個節點 記錄 sum 0.5 即位置mod 5 的5種結果的數對應的和。cnt記錄區間有多少個數。更新的時候 只要把對應子區間的sum i 加起來就可以了 include includeusing namesp...