原创 1065B - Vasya and Isolated Vertices(圖論/思維)(公式)

Description 求一個N個點M條邊的無向圖,點度爲 0 的點最多和最少的數量。 N≤105,M≤N×(N−1)2 Solution 關於最少的數量,注意到一條邊會增加兩個點度,所以最多能帶來 2M 個點度,最少的零點度點數

原创 CF 502 B-The Bits(找規律)

題意:兩個二進制數字a,b,然後進行or運算,然後進行交換數字a,如果數字交換以後,得到的結果不相同,求數字交換以後的位置。 思路:我們可以知道與運算有四種情況分別爲: a=0,a=0,a=1,a=1

原创 Masha and two friends(容斥+矩陣面積並)(矩形切割)

題意: 題目很長,但是其實題意非常簡單,首先是給定一個n*m的方格,然後黑白相間,其中左下角是白色。 然後有兩個人愛塗色,然後A先塗色把他所選中的地方塗成白色,然後B把他選中的地方塗成黑色。 然後問最後的情況白色格子有多少,黑色格

原创 Codeforces Beta Round #42 (Div. 2)-C. Lucky Tickets(水,思維)

題意:找兩張可以組成3的倍數的牌的方法數 題解:全部對3取模,然後%3==0的兩兩配對,min(1,2)配對。 #include<bits/stdc++.h> using namespace std; const int MAXN

原创 Codeforces Beta Round #69 (Div. 2 Only)

A - Panoramix’s Prediction b是否是大於a的第一個質數 #include <iostream> #include <cstdio> using namespace std; bool judge(int

原创 1034A - Enlarge GCD(div1)數論,線性篩的運用

題意:給出n個數字,求最少刪除幾個可以使剩下的數字的GCD大於n個數字的GCD。 思路:求出最多的公共因子,去掉沒有這個因子的數,剩下的數的GCD大於原來的GCD。 題解:隨便說說吧,要使GCD變大,那麼儘可能使數中的互質數變少,

原创 CodeForces - 1082C Multi-Subject Competition (前綴和 + 思維)

題意:給定n名選手,每名選手都有唯一選擇的科目si和對應的能力水平。選擇時每個科目對應數量要麼一致,要麼不選 題解:對於某一類的先排序,優先選擇大的,sum[i] 表示每類選擇i個,符合條件的 和 ,當然當某一類貢獻爲負時,就不選

原创 C. Equalize(思維)

題意:兩個長度爲n只含有0和1的字符串a,b,求最少花費多少可以將a字符串變成b字符串 有兩種操作: 1.將當前位置的字符取反(即0變成1,1變成0),花費1 2.將位置i和位置j的字符交換,花費爲abs(i-j). 思路: 我們

原创 B. Reach Median(思維)

題意:給n個數字,對每個數字多次可以加1或者減1,求最少操作幾次可以使得n個數字 中位數是s,題目保證n爲奇數。 思路:將n個數字從小到大排序,如果當前中位數是s,則輸出0 如果當前的中位數小於s,則需要將當前位置和之後的位置小於

原创 Codeforces 1038C. Gambling(貪心)(簡單博弈)

題意是兩個人分別有n個數,他們每次可以加上自己的一個數或者刪去對方的一個數(他們剛開始都爲0,A先操作),兩個人都很聰明,都想讓自己所得的數最大,最後求出A-B的最大值。 思路就是貪心,對於自己的最大數和對方的最大數來做比較,當自

原创 1082B - Vova and Trophies(思維好題)

給你一個包含GS的字符串,只允許交換一次任意不同位置的字符,問最長的連續G串是多少 分析 很顯然貪心找相鄰的中間間隔一個S的兩個連續G串 #include<bits/stdc++.h> using namespace std; i

原创 A. Benches(思維)

題意:題目大意:公園裏有n個座位,一開始每個座位都有多少人(人數給出),公園裏將進來m人,問這些人往座位上坐,那麼座位上人數最多的那個能有多少人,最多人數最小化能有多少人? 思路:最大的肯定好求,最小的要分兩類討論; 我的做法是,

原创 A. Oh Those Palindromes(思維結論題)

題意:給一個字符串,讓你重新把字符串重新排,使他從左到右把他順便分成子串,讓他可以成迴文的子串最多; 思路:當然是按升序排最多回文 結論題。 考慮個連在一起,此時有 個迴文子串。 再在其中插入一個其它的字符,答案一定會變小。因

原创 1085C - Connect Three(思維/貪心)

題目給了三個點的座標,問三個格子可以互相到達最少需要多少格子。 首先先將3個點的座標排序。 然後模擬,從A走到B,從C走到B,把經過的點放到set裏邊。 ps:用到set時結構體內應該實現構造 #include<bits/stdc

原创 B. Labyrinth(BFS 記憶化搜索)(雙端隊列)

記憶化搜索。dp[0] 向左 dp[1] 向右 dp[2] 表示這個點能夠滿足條件 #include<iostream> #include<queue> #include<string.h> using namespace std