Codeforces Round #546 div.2 B,C
阿新 • • 發佈:2019-03-13
重復元素 原來 分析 end 一個 class namespace lse 結果
第一次熬夜打cf,感覺確實腦子不靈光了. 再加上邊界條件確實考慮不周全.
寫下我的wa題思路吧
B
- 題意: 一排洞,每個洞下面有一個金幣,上面有一個石頭,需要將所有的金幣取出,且只有將石頭移開才能取金幣
移動,移動石頭,取金幣都花費1 - 思路: 根據暴力加模擬的思想,分析樣例可知在經歷過前兩個洞之後,每個洞只需要走,移,取 三步.
前兩個洞需要有一個洞空出來,來供後面的洞來放石頭,一側的石頭處理完後便移動到開頭來處理另一側.
#include<bits/stdc++.h> #define ll long long #define inf 0x3f3f3f3f using namespace std; const int maxn = 1e5+10; int n,k; int main(){ cin >> n >> k; if(k==n || k==1) cout << (n-2)*3+6 << endl; else // cout << (n-2)*3+6+k-1 << endl; { // int ans = 6; // for(int i=k-1;i>1;--i) ans+=3; // ans += k-1; // for(int i=k+1;i<=n;++i) ans+=3; // cout << ans << endl; // k = min(n-k,k); int ans = (n-2)*3+6-1; if(k>n/2){ ans += (n-k)+1; }else{ ans += k; } cout << ans << endl; } // if(n-k==1 || k==1) // { // cout << (n-2)*3+6 << endl; // } // else if(n==2) // cout <<6 << endl; // else // cout << (n-2)*3+7 << endl; return 0; }
註釋掉的代碼,是我走過的心路旅程
首先\(k=n\)和\(k=1\)是等價的 都不需要再從一側移動回來
當k>n/2,我們移動的距離是\((n-k)+1\)的半段
總體來說還是很簡單的
C
- 題意: 給一個矩陣,可以進行任意大小任意次數的轉置,
問是否能變化成另一個矩陣 - 思路: 副對角線是聯通的,只需判斷每個聯通集是否完全相對
#include<cstdio> #include<deque> #include<iostream> #include<vector> #include<algorithm> #include<cstring> #include<sstream> #include<stack> #include<map> #define ll long long #define inf 0x3f3f3f3f using namespace std; int n,m; const int maxn = 510; int a[maxn][maxn]; int b[maxn][maxn]; vector<int> aa; vector<int> bb; map<int,int> ma; map<int,int> mb; int vis[maxn*maxn]; int main(){ cin >> n >> m; for(int i=1;i<=n;++i){ for(int j=1;j<=m;++j) scanf("%d",&a[i][j]); } for(int i=1;i<=n;++i){ for(int j=1;j<=m;++j) scanf("%d",&b[i][j]); } for(int i=2;i<=m+n+1;++i){ ma.clear(); mb.clear(); for(int j=1;j<i;++j){ int k = i-j; if(j>n || k>m) continue; ma[a[j][k]]++; mb[b[j][k]]++; } for(auto j:ma){ if(mb[j.first]!=j.second){ cout << "NO" << endl; return 0; } } } cout << "YES" << endl; return 0; }
這題錯的更慘
最後兩分鐘交了一發ac了,結果賽後重判又給wa了,原因是原來map的計數有問題,不能解決聯通集有重復元素的情況.
而且一開始輸入用的cin老是TLE QAQ
收獲:
- 數據大,讀入優化(這道題輸入是1e6的)
- map判斷集合相等,只需要把每個值加入到map中,然後判斷second(出現次數)是否相等.
其實這兩題都非常的簡單,wa題的關鍵在於細節沒有控制好吧
Codeforces Round #546 div.2 B,C