【2022-06-25-第81场双周赛】

总结
Q2、Q4有点急了,不然不至于WA的。
Q1.统计星号
一开始看反了。用t标记一下状态,t = 0时当前不在一对竖线内,t = 1时当前在一对竖线内。
class Solution {
public:
int countAsterisks(string s) {
int ret = 0, t = 0;
for(auto c : s){
if(c == '|') if(t == 0) t = 1;else t = 0;
if(c == '*' && t == 0) ++ret;
}
return ret;
}
};
Q2.统计无向图中无法互相到达点对数
dfs找到每个连通块有多少个结点,然后前缀和统计。
class Solution {
public:
long long countPairs(int n, vector<vector<int>>& e) {
vector<int> adj[n];
vector<long long> a;
int vis[n]; memset(vis, 0, sizeof(vis));
long long ret = 0;
for(auto &v : e){
adj[v[0]].push_back(v[1]);
adj[v[1]].push_back(v[0]);
}
int t = 0;
function<void(int)> dfs = [&](int idx){
++t;
for(auto i : adj[idx]){
if(!vis[i]){
vis[i] = 1;
dfs(i);
}
}
};
for(int i = 0 ; i < n; ++i){
t = 0;
if(!vis[i]){
vis[i] = 1;
dfs(i);
}
if(t) a.push_back(t);
}
if(a.size() == 1) return 0;
long long ps[a.size() + 1]; ps[0] = 0;
for(int i = 0; i < a.size(); ++i) ps[i + 1] = ps[i] + a[i];
for(int i = 0 ; i < a.size(); ++i){
ret += a[i] * ps[i];
}
return ret;
}
};
Q3.操作后的最大异或和
脑筋急转弯,猜出来的答案。
class Solution {
public:
int maximumXOR(vector<int>& a) {
for(int i = 1; i < a.size(); ++i) a[i] |= a[i - 1];
return a[a.size() - 1];
}
};
Q4.不同骰子序列的数目
DP+前缀和。
class Solution {
public:
const long long M = 1000000007;
int distinctSequences(int n) {
if(n == 1) return 6;
if(n == 2) return 22;
vector<vector<int>> a = {{}, {2, 3, 4, 5, 6}, {1, 3, 5}, {1, 2, 4, 5}, {1, 3, 5}, {1, 2, 3, 4, 6}, {1, 5}};
long long dp[n][7], ps[2][n][7];
memset(dp, 0, sizeof(dp));memset(ps, 0, sizeof(ps));
for(int i = 1 ; i <= 6; ++i) ps[0][1][i] = dp[0][i] = 1, ps[1][1][i] = dp[1][i] = a[i].size();
for(int i = 2; i < n; ++i){
for(int j = 1; j <= 6; ++j){
for(int k = 0; k < a[j].size(); ++k){
dp[i][j] += (ps[(i - 1) & 1][i - 1][a[j][k]] - ps[i & 1][i - 1][j] + M) % M;
}
dp[i][j] %= M;
ps[0][i][j] = ps[0][i - 1][j], ps[1][i][j] = ps[1][i - 1][j];
if(i & 1) ps[1][i][j] = (ps[1][i][j] + dp[i][j] + M) % M;
else ps[0][i][j] = (dp[i][j] + ps[0][i][j] + M) % M;
}
}
long long ret = 0;
for(int i = 1; i <= 6; ++i) ret += dp[n - 1][i];
return ret % M;
}
};
浙公网安备 33010602011771号