Codeforces Round #662 (Div. 2)
生活随笔
收集整理的這篇文章主要介紹了
Codeforces Round #662 (Div. 2)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
就寫了兩個題,以為要掉分,結果早上起來發現還上分了(說明wtcl
A - Rainbow Dash, Fluttershy and Chess Coloring
無論邊長是奇數還是偶數,考慮每次操作最外層的一圈,一個人操作一圈的一般,然后另一個人就能夠把這一圈涂滿,而且還能繼續操作最外圈。每次2人操作后問題變成邊長-2的情況。稍微思考一下就可。
#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #include<iostream> #include<algorithm> using namespace std; int n; int main() {IO;int T;cin>>T;while(T--){cin>>n;if(n&1)cout<<(n-3)/2+2<<endl;elsecout<<(n-2)/2+2<<endl;}return 0; }B - Applejack and Storages
統計4的倍數和2的倍數。其中既是4的倍速也是2的倍數只看做4的倍數。
#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #include<iostream> #include<algorithm> using namespace std; const int N=100010; int mp[N]; int n,q; int main() {IO;cin>>n;int x=0,y=0;for(int i=1;i<=n;i++){int a;cin>>a;mp[a]++;if(mp[a]%2==0) y++;//加完后是2的倍數if(mp[a]%4==0) x++,y-=2; //加完后是4的倍數(要把二的倍數減去)}cin>>q;while(q--){char op;int a;cin>>op>>a;if(op=='+'){mp[a]++;if(mp[a]%2==0) y++;if(mp[a]%4==0) x++,y-=2;}else{if(mp[a]%2==0) y--;//減之前是2的倍數 2的倍數減小一個if(mp[a]%4==0) x--,y+=2;//減之前是4的倍數 4的倍數減小一個,2的倍數最終應該增加一個(由于上面減了一個要加二個這點wa了2發)mp[a]--;}if(x>=1&&y>=2||x>=2) cout<<"YES"<<endl;else cout<<"NO"<<endl;}return 0; }C - Pinkie Pie Eats Patty-cakes
最小距離最大?二分?,做題的時候我就發現二分的check函數好像不容易寫。如果能夠寫出check函數其實好像不用二分直接答案就出來了。
果不其然,群友說這就是個貪心題,后來想了想果然是。1111222233334445566789
比如上述序列,構造方式如下:
1234569
123457
123468
123
如果是11111222233334445566789
123469
12346
12357
12458
13
因此有以下貪心
D-Rarity and New Dress
懸線dp?第一次聽說,一定要把這題補了
解法一:二分抄代碼題解
維護菱形中間點,先求上下最長,維護左右最長(不能超過上下最長)
解法二:
這個菱形可以看成4個等腰直角三角形,維護等腰直角三角形(即菱形中心點)
f[i][j]表示s[i][j]為直角頂點最大等腰直角三角形。4次dp
總結
以上是生活随笔為你收集整理的Codeforces Round #662 (Div. 2)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 标准视力表e是什么意思 C视力表怎样
- 下一篇: Codeforces Round #66