Time of Update: 2018-12-04
做法:額,和FZU一題求最短路的某一題很像啊,把門兩側、起點、終點都化作圖中的點。然後根據圖中情況求出每個點的通達情況。#include<cstdio>#include<cmath>#define eps 1e8const int LMT=102;int wn,n;double gra[LMT][LMT];struct wall{double y1,y2,x;}w[LMT];struct point{double x,y;}p[LMT];inline double
Time of Update: 2018-12-04
連結:http://poj.org/problem?id=3270做這道題,是昨天的比賽被1003給虐爆了./*Problem ID: poj 3270meaning: 給出一列數,要將其排列成升序序列所需的最少花費,ps:cost 是交換的兩數之和.Analyzing:置換群.黑書p248.找到每個迴圈節的長度ki和它的最小元素ti cost=sum+sum(min(ki-2)*ti,ti+(ki+1)m)*/#include
Time of Update: 2018-12-04
熱身賽的1003,,水題啊,可是我折騰了一天。首先要先發一次牌,得到一個順序,再根據這個順序獲得各個迴圈節的長度,對迴圈節求最小公倍數,便是總的最少移動次數.題意是,n張牌每次發給k個人,再堆疊起來重新發:比如範例 10 3原始狀態是: 1 2 3 4 5 6 7 8 9 10一次過後: 10 7 4 1 8 5 2 9 6 3第二次 3 2 1 10 9 8 7 6 5 4 第三次 4 7 10 3 6 9 2 5 8 1 第四次 1 2 3 4 5 6 7 8 9 10
Time of Update: 2018-12-04
做法:直接DFS即可,題目要求最小的運算元其實可以理解成必須的運算元。若 節點 x的值為a,a<0,則它的父節點必須做a次上升操作,a>0亦然,然後在看父節點經過這樣的改造或的值,重複前面的運算即可#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#define LL long longusing namespace std;const
Time of Update: 2018-12-04
做法:反正最終會形成的狀況很多都是一整條一整條的區間中的所有值大於等於limit.所以一開始可以不用懶惰更新,直接更新至一段最小值大於lim或者最大值小於lim的區間。題目時間卡的很緊,手動輸入還有最佳化一下update函數,多參數的函數效率果然低到加,最後險過。#include<cstdio>#include<cstring>#define left l,m,x<<1#define right m+1,r,x<<1|1const int LMT=
Time of Update: 2018-12-04
題意:寬W的河面上有N個垃圾堆,每個垃圾堆只能站C人。河對岸有M個人,他們想藉著垃圾堆跳著過河,當然,如果河比較窄,可以直接跳過河。每個人跳躍一次最多可以跳D遠,問那些人過河的最短時間。做法:此題不可以用費用流做,因為,每個人完全可以中途站在垃圾堆上,然後再跳過去。所以用了動態流的方法,把圖按照時間軸,分成一層一層的。這樣就先枚舉時間,然後用最大的手法做題。參考了大牛的做法,學了一些宏函數的定義。#include<stdio.h>#include<string.h>#de
Time of Update: 2018-12-04
直接上代碼,沒什麼好說的。#include<stdio.h>#include<string.h>#define LMT 205#define eps 3e8typedef struct{ int u,v;}line;line e[LMT*LMT];int mat[LMT][LMT],fmat[LMT][LMT],q[LMT],lev[LMT],lim[LMT][LMT];int n,m;int bfs(int s,int t){ int
Time of Update: 2018-12-04
真是得跪,,,我以前做的求逆序數若爆了,連芒果大神都對我無語了。嗚嗚嗚這題和poj那道置換數很像,但是這題要求必須相鄰的數才能交換。這就可以用樹狀數組求數x之前比x大的數量和比x大的數的和。以前只是覺得在x之前插入,然後查詢的時候找比x大的,現在發現不對。C1=a1C2=a1+a2C3=a3C4=a1+a2+a3+a4.....樹狀數組只能求0~N的和。比如 3 : sum+=a3,x-=lowbit(x) x=2
Time of Update: 2018-12-04
給出一個長度為n的序列求這個序列中非遞減的序列有幾個。1,2,3: {1}, {2}, {3}, {1, 2}, {1, 3}, {2, 3}, {1, 2, 3}.一共有7個。 1 <= n <= 100000, 0 <= si <= 2^31.資料過大,所以需要離散化。怎麼離散化呢?將值對應到下標。再取原數組可知每個數在什麼位置。再將得到的下標查詢,查詢後+1,每次都是增加1,再將這個數更新進樹狀數組。說的不是很清楚,還是看代碼吧/*Problem
Time of Update: 2018-12-04
題意:給出n個星星以座標形式(X,Y),順序為先按y排序,再按x排序。求出每個等級的星星個數。星星的等級是按照其左下方的星星個數表示的,包括正左和正下的因為星星座標是按照y的升序給出的所以我們只要考慮x便可以,把x放進數狀數組裡。#include<stdio.h>const int maxn=32005;int C[maxn];int lowbit(int x){ return x&(-x);}void update(int pos,int val){
Time of Update: 2018-12-04
和前面一題差不多的思路。但是這題要做的處理多一點。題意:相鄰兩個數之和<=d.給出一個序列計算出符合要求的序列個數。abs(a[i]-a[j])<=dd-a[i]<=a[j]<=d+a[i]找到大於a[i]-d的最大數L,找到小於a[i]+d的最大數R求出[L,R]之間小於等於H的數。/*Problem ID:meaning:Analyzing:*/#include <iostream>#include
Time of Update: 2018-12-04
理解對了了題意的話應該算是道簡單的樹狀數組。題目要求裁判不能同時低於兩個人,或者同時高於兩人。就是求一個長度為3的順序序列。這樣的話對於第i個數ai,我們可以求出左邊比ai大的數lmaxi,右邊比ai小的數rmini.相乘再加上反過來左邊小右邊大的情況就是結果。#include <iostream>#include<cstdio>#include<cstring>#define maxm 100001#define clr(A,k) memset(A,(k),
Time of Update: 2018-12-04
有個序列找出所有正序數的對數,R是將S,E之間的數rotate。Q是求當前的正序數。樹狀數組+類比這道題坑的啊,用G++交的話TLE了,C++就540ms/*Problem ID:meaning:Analyzing:*/#include <iostream>#include <algorithm>#include<cstdio>#include<cmath>#include<cstdlib>#include<cstring>
Time of Update: 2018-12-04
第一題弱逼了,線代沒好好學,忘了叉積可以判斷兩個向量的方向:叉乘(cross product)相對於點乘,叉乘可能更有用吧。2維空間中的叉乘是: V1(x1, y1) X V2(x2, y2) = x1y2 – y1x2看起來像個標量,事實上叉乘的結果是個向量,方向在z軸上。上述結果是它的模。在二維空間裡,讓我們暫時忽略它的方向,將結果看成一個向量,那麼這個結果類似於上述的點積,我們有: A x B = |A||B|Sin(θ)然而角度 θ和上面點乘的角度有一點點不同,他是有正負的,
Time of Update: 2018-12-04
題意:在一個網路中有M條管道,有一些管道必須滿流.這個網路中有標號為1 的源點和標號為N的匯點。求此網路流中的最小流。做法:一般的上下界網路流,可以用來測試模板。#include<stdio.h>#include<string.h>#define LMT 200#define eps 2e9typedef struct{ int u,v;}line;line e[LMT*LMT];int
Time of Update: 2018-12-04
做法:在udate之後可以直接把線段樹上的資訊映射到一個數組上考慮#include<cstdio>#include<cstring>#define left l,m,x<<1#define right m+1,r,x<<1|1const int LMT=16002;int cov[LMT<<2],seg[LMT],ans[LMT];//映射法void
Time of Update: 2018-12-04
把這幾天做的線段樹都貼下...表示是跟著hh走的,,,貼海報,,,還是成段更新.範圍有點大,離散化操作.最後能看見幾張,查詢..參考:#include <iostream>#include<algorithm>#include<cstdio>#include<cstring>using namespace std;#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1#define
Time of Update: 2018-12-04
轉自:http://www.cnblogs.com/hebozi/archive/2012/08/06/2624623.html基本組合計數HDU1028 Ignatius and the Princess III 整數劃分HIT1402 整數劃分問題 多種整數劃分解題報告:點擊進入查看置換群PKU2369 求置換的周期1026 求置換的迴圈節1721 置換的冪運算3270 置換的迴圈節,黑書題1879 類比+置換的迴圈節HDU1537
Time of Update: 2018-12-04
開學以來好久沒做群賽啊....基本上做了就會發發自己做的題目,雖然很菜t t1個水題 最後一題 1個類比題 後來才發現,囧1個數論,這次又通過這題數論學到好多。K - Hit and Blow 迷迷糊糊寫了幾個比較,然後就過了t_t H - Peer Review 類比題 有problem 滿足3個條件:1.被一個人審批多次,2.被同組織審批,3.被審批次數不等於k#include<stdio.h>#include<string.h>#define LMT 100
Time of Update: 2018-12-04
原點#include<cstring>#include<cstdio>#include"iostream"#define INF -99999999using namespace std;int d[110],next[110][110],son[110],bro[110],c[110],f[110],n,k,maxt[2][110][210],r;void Zh(int p){ f[p]=1; for(int i=0;i<d[p];i++) if