建设网站可以搜索电影,安徽苏亚建设安装有限公司网站,wordpress阅读量,网站开发公司创业A - Short Sort
题目#xff1a; 思路#xff1a;
本条题目只允许改一处地方#xff0c;只有三个字母#xff0c;我们可以直接枚举所有移动过的结果#xff0c;同时使用哈希去记录其值#xff0c;对于每一个输入我们都寻找是否有这个值记录#xff0c;有则输出YES否则…A - Short Sort
题目 思路
本条题目只允许改一处地方只有三个字母我们可以直接枚举所有移动过的结果同时使用哈希去记录其值对于每一个输入我们都寻找是否有这个值记录有则输出YES否则NO
代码
#includeiostream
#includemap
using namespace std;
int main(){mapstring,int h;//初始化哈希h[abc]1;h[acb]1;h[cba]1;h[bac]1;int n;cinn;while(n--){string str;cinstr;if(h[str]1) coutYESendl;else coutNOendl;}return 0;
}
B - Good Kid
题目 思路
本题当中的数值全为正数要想乘积最大则只需要最小值变大即可因此首先对数组进行排序将最小的数字1然后相乘即可。
代码
#includeiostream
#includemap
#includevector
#includealgorithm
using namespace std;
int main(){int t;cint;while(t--){int n;cinn;int sum;vectorint a(n);for(int i0;in;i) cina[i];sort(a.begin(),a.end());suma[0];for(int i1;in;i) sum*a[i];coutsumendl;}return 0;
}
C - Target Practice
题目 思路
本题遍历五个环并乘以相应的值即可五个环我们可以发现是完全对称的状态我们可以通过不断缩小环即可。
代码
#includeiostream
#includemap
#includevector
#includealgorithm
#includecstring
using namespace std;
int solve(){string cnt[10];for(int i0;i10;i) cincnt[i];//完全对称int k1;int sum0;for(int top0;top5;top){int c0;for(int itop;i10-top;i) if(cnt[i][top]X) c;//i 0-9 j0 第一列 for(int itop1;i10-top-1;i) if(cnt[10-top-1][i]X) c;//i 9 j 1-8 最后一行for(int itop;i10-top;i) if(cnt[i][10-top-1]X) c;//i 0-9 j9 最后一列for(int itop1;i10-top-1;i) if(cnt[top][i]X) c;//i 0 j 1-8第一行 sumc*k; k;}return sum;
}
int main(){int t;cint;while(t--){int anssolve();coutansendl;}return 0;
}
D - 1D Eraser
题目 思路
本题问最小多少次能够将其染成W只需要我们每次遇到B时都进行k个染色即可
代码
#includeiostream
#includemap
#includevector
#includealgorithm
#includecstring
using namespace std;
int solve(){int ans0;int n,k;cinnk;string str;cinstr;for(int i0;in;){if(str[i]B){ans;ik;} else i;} return ans;
}
int main(){int t;cint;while(t--){int anssolve();coutansendl;}return 0;
}
E - Building an Aquarium
题目 思路
本题考察的时二分我们可以假设答案h初始值为0然后将其慢慢上移直到满足条件此处不难看出h具有单调递增的特点因此我们使用二分进行搜索答案对于我们搜索出的二分只有当高度为h时所需水量小于等于我们提供的水量才能够满足我们的条件满足条件则记录最终取其最大值。
优化当我们判断水是否满足时可以先做一个排序因为高度越小的所需要的水量越多同时减少由于要遍历所带来的更多的判断步骤。
代码
#includeiostream
#includevector
using namespace std;typedef long long ll;void solve()
{int n, w;cin n w;vectorll a(n);for (int i 0; i n; i )cin a[i];
//此处排序减少判断次数sort(a.begin(), a.end());ll l 0, r 2e9 1;
//二分答案hwhile (l r){ll h (l r 1) 1;ll t 0;for (int i 0; i n; i )if (a[i] h)t h - a[i];else break;if (t w) l h;else r h - 1;}cout r endl;
}int main()
{int T; cin T;while (T --) solve();return 0;
}F - Money Trees
题目 思路
本题考查的前缀和滑动窗口我们可以在统计统计前i个的和那么窗口中的和则为 第r个 - 第l-1个其次我们可以通过前缀和的思想来考虑哪一段树可以摘r~r-b[r]对于每一段我们通过滑动窗口的思想来确定边界。
代码
#includeiostream
#includestdio.h
#includevector
#includealgorithm
using namespace std;
#define ll long long void to_do() {ll n, k, ans 0, sum 0;cin n k;vectorll cnt_num(n 1), a(n 1);vectorll cnt_h(n 1);for (int i 1; i n; i) {cin a[i];cnt_num[i] cnt_num[i - 1] a[i];//前缀和,某个连续部分的和为cnt_num[r]-cnt_num[l-1]}for (int i 1; i n; i) cin cnt_h[i];ll l 0, l_max0;vectorint b(n 1);//可摘树的长度int idx 0;for (int r 1; r n; r){//记录可摘树的长度if (r 1|| cnt_h[r - 1] % cnt_h[r]){b[r] 0;}else{b[r] b[r - 1] 1;}int l max(r - b[r], idx);ll res cnt_num[r] - cnt_num[l - 1];if (res k){ans max(ans, r - l 1ll);}else{while (res k){res - a[l];l;}idx l;ans max(ans, r - l 1ll);}}cout ans endl;
}
int main()
{int t; cin t;while (t--) to_do();return 0;
}