东菀高端网站建设,wordpress 摘要 格式,绍兴网站制作报价,加拿大广播公司文章目录 A lz的吃饭问题思路code B lz的数字问题思路code C lz的蛋挞问题思路code D lz的染色问题思路code E lz的括号问题思路code 总结 牛客小白月赛105
A lz的吃饭问题
思路
签到题#xff0c;比较大小即可
code
void solve(){int a,b,c,d;cin a b… 文章目录 A lz的吃饭问题思路code B lz的数字问题思路code C lz的蛋挞问题思路code D lz的染色问题思路code E lz的括号问题思路code 总结 牛客小白月赛105
A lz的吃饭问题
思路
签到题比较大小即可
code
void solve(){int a,b,c,d;cin a b c d;if(a*bc*d) cout lz endl;else cout gzy endl;return ;
}B lz的数字问题
思路
在 a , b a,b a,b 后面补0将小数点后7位数全部删除
最后比较大小即可
code
void solve(){string a,b;cin a b;int k1a.find(.);int k2b.find(.);if(k1-1) a.0000000;else a0000000;if(k2-1) b.0000000;else b0000000;k1a.find(.);k2b.find(.);a.erase(k17);b.erase(k27);if(ab) cout YES endl;else cout NO endl;return ;
}C lz的蛋挞问题
思路
对于改变蛋挞联通块的情况大致分为2种:
. . . 与 x . x 情况一致这为一种情况 (将中间的.换成x)x x
. . 与 . . 情况一致这为另一种情况 (左边的图将左上角的.换成x右边的图将右上角的.换成x)
. x x .最后就是边界问题
. x 与 x . 只要邻边是x就满足
x x纯模拟即可
code
void solve(){int n;cin n;string s,t;cin s t;int ans0;for(int j0;js.size();j){if(s[j]x) continue;if(j0||jn-1){if(t[j]x s[j1]x || t[j]x s[j-1]x) ans;else if(s[j1]. t[j]. t[j1]x) ans;else if(s[j-1]. t[j]. t[j-1]x) ans;}else if(t[j]x s[j1]s[j-1]) ans;else if(s[j1]. t[j]. t[j1]x) ans;else if(s[j-1]. t[j]. t[j-1]x) ans;}for(int j0;jt.size();j){if(t[j]x) continue;if(j0||jn-1){if(s[j]x t[j1]x||s[j]x t[j-1]x) ans;else if(t[j1]. s[j]. s[j1]x) ans;else if(t[j-1]. s[j]. s[j-1]x) ans;}else if(s[j]x t[j1]t[j-1]) ans;else if(t[j1]. s[j]. s[j1]x) ans;else if(t[j-1]. s[j]. s[j-1]x) ans;}cout ans endl;return ;
}D lz的染色问题
思路
建图将每天要观察的花的序号看成图
例如 一个序列 1 2 3 4 5 6 7 8 观察的花的序号为 1 2 2 3 1 4 5 6 6 7
对于前三组序列来说1到2有一条边2到3有一条边1到4也有一条边 这四个点不在到达其他点那么这四个点构成一个联通块我们在这个联通块里找出现次数最多的花色 将其他花色变为出现次数最多的花色即可 后2组序列同理5 6 7 三个点构成另一个联通块 在这个联通块里也将其他花色变为出现次数最多的花色
将花的序号分为多个联通块考虑每个联通块中将其他花色变为出现次数最多的花色用一个ans变量累加转换的次数最后输出ans即可
code
const int N1e65;
int a[N],vis[N];
vectorint e[N];
mapint,int m;
void dfs(int x){m[a[x]];vis[x]1;for(auto y : e[x]){if(!vis[y]) dfs(y);}
}
void solve(){int n,q;cin n q;for(int i1;in;i) cin a[i];while(q--){int u,v;cin u v;e[u].push_back(v);e[v].push_back(u);} int ans0;for(int i1;in;i){if(!vis[i]){m.clear();dfs(i);int sum0,mx0;for(auto i : m){sumi.se;mxmax(mx,i.se);}anssum-mx;}}cout ans endl;return ;
}E lz的括号问题
思路
用栈模拟括号匹配
栈里面存的是左括号出现的顺序
如果当前遍历到右括号时栈顶为空说明括号匹配不满足直接输出-1 反之当前栈顶的元素可删去的括号数等于 n − 栈的大小 n-栈的大小 n−栈的大小 (除了包含这个括号的括号对不能删除其他都能在它前面删除)
最后顺序输出即可
code
const int N1e65;
int a[N];
void solve(){int n;cin n;string s;cin s;stackint st;vectorint ans(n1);int k1;for(auto i : s){if(i() st.push(k);else{if(st.empty()){cout -1 endl;return ;}else{ans[st.top()]n-st.size();st.pop();}}}for(int i1;in;i) cout ans[i] ;return ;
}总结
这场牛客打的稀碎C题题目看错了感觉不好写就没看了 D题赛时没想到建图卡死在D题 E题实际上挺简单的赛时也没时间看了 思维还是不够敏捷题目练太少了特别是图论基本上我都没往那方面去想下去多看看图论的题找找手感太菜了