原创 Wannafly4 B Distance(最大曼哈頓距離)

傳送門   最大曼哈頓距離模板題 #include<bits/stdc++.h> using namespace std; #define ll long long const int maxn=1e5+10; struct node

原创 51nod1097

  從這題算是學到了排序的技巧   #include<bits/stdc++.h> using namespace std; string s[10000+10]; bool cmp(string s1,string s2) {

原创 CodeCraft-19 and Codeforces Round #537 (Div. 2) B. Average Superhero Gang Power

  先排序,直接暴力把前i個數刪掉求最大平均值(0<=i<=min(n-1,m)),然後取最大即可 #include<bits/stdc++.h> using namespace std; #define ll long long co

原创 CodeCraft-19 and Codeforces Round #537 (Div. 2) C. Creative Snap

  題目大意就是有一個長度爲2^n的區間,然後要求把這個區間摧毀的最小花費是多少。每次有2種操作,1.當目前區間長度>=2時,可以把整個區間對半分,然後分別摧毀(感覺這個和線段樹有點類似)。2.對於當前區間可以直接摧毀   我的做法就是用

原创 51nod 1007正整數分組(01揹包變形)

  題目大意就是給n個數,分2組,求2組和之差最小。   這題我一開始寫的dfs結果t了,後面看了題解說是0揹包變形才恍然大悟。第一種解法:先把n個數的和sum求出來,要使得2組數和之差儘可能小,必定是要使得一組逼近sum/2,於是從這裏

原创 小a與星際探索

  題意就是讓你找一條1到n的路徑使得路徑上點的異或和最大。   這裏定義了f[i]表示爲1到達n,耐久度爲i是否可行,先判斷p[1]是否是>p[n]的,否則的話無解,是的話先給f[p[1]^p[n]]=1,表示這個狀態是可行的,然後利用

原创 hdu4825(01trie)

模板題 題意就是給一個集合s,一個數,在集合裏找到與該數異或值最大的數是多少 #include<bits/stdc++.h> using namespace std; const int maxn=1e5+5; struct node

原创 hdu5536(01trie)

  題意就是給一個集合,然後在集合裏找到3個數,滿足max (si+sj)⊕sk。   枚舉i和j,然後把si,sj從字典樹裏刪除,然後再在字典樹裏找與(si+sj)異或最大的數,取最大值,最後還要還原刪除的數。刪除    操作是話就是讓

原创 Codeforces Round #533 (Div. 2) C. Ayoub and Lost Array

  題意就是給你一個l和r,要你求一個長度爲n的序列有多少種,該序列要滿足序列和%3==0.   定義dp[i][j]爲處理到第i個數,前i個數之和模3爲j的方案數,設l到r模3爲0,1,2的數個數分別爲a,b,c   則有dp[i][0

原创 poj3764

  題意就是給一棵樹,然後讓你求最大的路經異或和是多少,一條路徑的異或和是該路徑上的邊對應的邊權的異或和。   因爲^具有自反性,即a^a=0,所以我們只需要dfs處理出根節點到每個點的路徑的異或和dp[i],那麼u至v的路徑的異或和即等

原创 Codeforces Round #529 (Div. 3) E. Almost Regular Bracket Sequence

題目大意就是給一個長度爲n括號序列,然後問你有幾個位置,你將該位置的括號反轉之後,這個括號序列可以變成合法的括號序列。合法的括號序列定義就是 1.括號序列裏左右括號數量相等 2.對於i位置對應的前綴裏左括號數量>=右括號數量(1<=i<=

原创 CodeForces - 1084C The Fair Nut and String(DP)

  題目意思就是給你一個字符串,然後要問你一種子序列的種數有多少?然後這種子序列的定義是這樣的:子序列是遞增的字符串s下標,然後對於子序列裏的每個下標,要求該下標對應的s裏的字符是'a',然後要求子序列裏每一個下標和它後面的一個下標之間存

原创 Codeforces Round #525 (Div. 2) C. Ehab and a 2-operation task(構造)

傳送門 題目意思就是給一個長度爲n的序列,然後你有2種操作,一種是對前i個數加上x,一種是對前i個數模x,然後問能否在n+1步內把序列變成嚴格遞增序列。 思路:首先對於任意序列是肯定能在n+1步內把序列變成嚴格遞增序列。具體講就是把每個a

原创 G - A Question of Ingestion Gym - 101673G

  記憶化搜索 #include<bits/stdc++.h> using namespace std; #define maxn int dp[105][30][5],a[105],n,m; vector<int>v; int dfs

原创 Educational Codeforces Round 53 (Rated for Div. 2) C. Vasya and Robot

  先提前處理求出u,d,l,r的前綴數組,然後 二分修改區間的長度即可 #include<bits/stdc++.h> using namespace std; const int maxn=2e5+10; int n,x7,y7,x