好久沒有考場上 a題了
題目大意 : 構造出乙個 01 序列使得存在乙個 1 滿足這個 1 後面是 0,且這個 1 和後面的 0 交換後與原序列迴圈同構
101011010101
2 2 12 2 2 1
101010110101
2 2 2 12 2 1
1101110
12 112
1110110
112 12
show code#include #include using namespace std;
const int n = 105;
int a[n], b[n], p[n];
void solve(int l, int k)
}bool judge(int l)
void next(int l)
}int main() }}
return 0;
}
題目大意 : 給定 n 個字串,每個串選乙個字首,以任意順序拼起來,令得到的串字典序最小
show code
#include #include #include using namespace std;
const int n = 55;
int n;
string ans;
struct node a[n];
bool operator < (const node &a, const node &b)
int main()
a[i].x = a[i].s.substr(0, x); y = x;
while (a[i].s.substr(y, x) == a[i].x) y += x;
a[i].y = a[i].s.substr(y);
for (int j = 1; j <= 6; ++j)
a[i].x += a[i].x;
}sort(a + 1, a + n + 1);
for (int i = n; i >= 1; --i)
cout << ans;
}
題目大意 : 給定一顆樹,第一次經過一條邊有花費,第一次到達乙個點會有收益,問從根到終點最小透支多少
show code
#include #include using namespace std;
const int n = 2e5 + 5;
int read(int x = 0, int f = 1, char c = getchar())
bool v[n];
int n, fa[n], f[n];
long long w[n], c[n], ans, sum;
int find(int x)
bool cmp(int x, int y)
sets(cmp);
int main()
while (!s.empty())
}printf("%lld\n", -ans);
return 0;
}
省選測試21
設 f i 為上一次參加的比賽是第 i 場的最大愉悅值 則 f i max f i f j frac a i j 對於隨機的資料,把列舉的範圍卡到 3000 即可 容易發現,如果沒有 a j leq a i 的限制,那麼就是乙個裸的斜率優化 dp 把 f i frac frac 看做 y 把 i 看...
省選測試9
這個名次已經是倒數了 感覺整場考試不是很在狀態,正解想不到,暴力分也沒有打滿 其實前兩道題仔細推一下還是能想出來的 t1 2 sat 有一段時間沒有打了 優化建圖的方式和之前的某道題挺像的,但是當時那道題沒改 這次算是補了乙個鍋 t2 的資料範圍折半列舉也不難想,實現時注意一下細節就行了 t3 有一...
省選測試28
題目大意 給乙個排列,翻轉k次,問最終逆序對個數的期望值 然後在用兩個字首和分別優化這3種轉移就好了 show code include define mod x using namespace std const int n 505,m 1e9 7 int n,k,a n f n n s1 n n...