liaoliao四連做第一彈
由於$10^9$以內的數最多只會被開方$10$次,所以我們可以用線段樹維護然後剪枝..
#include #include #include #include #include #define ll long longusing namespace std;
const ll maxn = 100010;
ll p[maxn][31], nochange[maxn][31];
ll sum[maxn*4], la[maxn*4]; bool isone[maxn*4];
ll n, m;
void bulid_tree ( ll now, ll l, ll r )
else
}void push_down ( ll now, ll l, ll r )
}void change ( ll now, ll l, ll r, ll l, ll r )
push_down ( now, l, r );
ll mid = ( l + r ) >> 1, lc = now*2, rc = now*2+1;
if ( r <= mid ) change ( lc, l, mid, l, r );
else if ( l > mid ) change ( rc, mid+1, r, l, r );
else change ( lc, l, mid, l, mid ), change ( rc, mid+1, r, mid+1, r );
sum[now] = sum[lc]+sum[rc];
if ( la[lc] == la[rc] ) la[now] = la[lc]; else la[now] = -1;
if ( isone[lc] && isone[rc] ) isone[now] = true;
}ll query ( ll now, ll l, ll r, ll l, ll r )
int main ()
}for ( j = 0; j <= 10; j ++ )
bulid_tree ( 1, 1, n );
scanf ( "%lld", &m );
for ( i = 1; i <= m; i ++ )
else
}return 0;
}
考慮乙個貪心策略,從小到大移動,小的數肯定放兩邊(哪邊近放哪邊)
那麼對於某個數能夠影響他的也就只有比他大的數了
然後就從大到小插入然後樹狀陣列判斷一下就好了..
#include #include #include #include #define ll long longusing namespace std;
const ll maxn = 300010;
struct node list[maxn];
bool cmp ( node x, node y )
ll sum[maxn], n;
ll lowbit ( ll x )
void add ( ll x ) }
ll query ( ll x ) return ret; }
ll _min ( ll x, ll y )
int main ()
ll s = query (list[i].pos);
ans += _min ( s, num-s-1 );
}printf ( "%lld\n", ans );
return 0;
}
二分答案,然後用網路流判斷,是乙個比較經典的最小割模型..
像這種小數流量的,可以先把這個數擴大$10^6$最後再縮小..
聽說這種做法叫做分數規劃(霧)
#include #include #include #include #include #define ll long longusing namespace std;
const ll maxn = 55;
const ll maxm = 55*55;
const ll inf = 0x7fffffff;
struct node a[maxm*20]; ll first[maxm], len;
void ins ( ll x, ll y, ll c )
ll n, m;
ll st, ed, h[maxm];
ll getnum ( ll x, ll y )
ll map[maxn][maxn];
ll row[maxn][maxn], col[maxn][maxn];
ll _min ( ll x, ll y )
ll dfs ( ll x, ll flow )
}if ( delta == 0 ) h[x] = -1;
return delta;
}bool bfs ()}}
return h[ed] > 0;
}int main ()
sum *= 1e6;
for ( i = 1; i <= n+1; i ++ ) for ( j = 1; j <= m; j ++ ) scanf ( "%lld", &row[i][j] );
for ( i = 1; i <= n; i ++ ) for ( j = 1; j <= m+1; j ++ ) scanf ( "%lld", &col[i][j] );
ll l = 0, r = 100*1e6, ret;
st = 0; ed = n*m+1;
while ( l <= r )
ii = i+1; jj = j;
if ( ii >= 1 && ii <= n && jj >= 1 && jj <= m )}}
ll delta = 0;
while ( bfs () )
if ( sum-delta > 0 )
else r = mid-1;
}printf ( "%.3lf\n", (double)ret/1e6 );
return 0;
}
先找重心,因為重心肯定是剛好對應的(如果有兩個重心就新建乙個重心練到這兩個點然後再亂搞..)
那麼剩下的肯定只有是在交換子樹下才有可能同形異構..
這個東西就是乙個可重複排列..
**先挖個坑..
C Light 和 uLua的對比第二彈
上次的對比大家還有印象否,c light和ulua對比各有勝負 今天我們加入乙個去反射優化,這是ulua沒辦法實現的優化,我們也就只能不要臉的勝之不武了 以原生執行同一測試時間為x1,數字越小的越快 專案ulua c light c light 去反射優化 效能測試一 x4.5 x4.5 x2.19...
HH的項鍊 第二彈(莫隊 離線)
同樣的我們依舊進行離線並對詢問進行排序,以左端點所在塊為第一關鍵字,以右端點為第二關鍵字。這樣可以減少大幅度移動次數 我們以樣例為例 資料1 2343 5編號12 3456 塊號112 233提問 1.1,2 2.2,6 3.3,5 那麼我們就要兩個移動下標f1,f2。其實位置為0,0 隨著問題的討...
開發工具的安裝與使用(第二彈)
前一篇博文中談到python開發工具之一notepad 的安裝,今天簡要說說如何利用notepad 編輯python 並執行 在此之前,必須提醒一點,僅有notepad 只能完成 的編輯 當然它也有簡單的執行功能 要想執行 還要安裝python的 直譯器。換句話說,如果想用notepad 來學習py...