wordpress tab切換怎么做好seo推廣
A - Short Sort
題目:
思路:
本條題目只允許改一處地方,只有三個(gè)字母,我們可以直接枚舉所有移動(dòng)過(guò)的結(jié)果,同時(shí)使用哈希去記錄其值,對(duì)于每一個(gè)輸入我們都尋找是否有這個(gè)值記錄,有則輸出YES否則NO
代碼:
#include<iostream>
#include<map>
using namespace std;
int main(){map<string,int> h;//初始化哈希h["abc"]=1;h["acb"]=1;h["cba"]=1;h["bac"]=1;int n;cin>>n;while(n--){string str;cin>>str;if(h[str]==1) cout<<"YES"<<endl;else cout<<"NO"<<endl;}return 0;
}
B - Good Kid
題目:
思路:
本題當(dāng)中的數(shù)值全為正數(shù),要想乘積最大則只需要最小值變大即可,因此首先對(duì)數(shù)組進(jìn)行排序,將最小的數(shù)字+1,然后相乘即可。
代碼:
#include<iostream>
#include<map>
#include<vector>
#include<algorithm>
using namespace std;
int main(){int t;cin>>t;while(t--){int n;cin>>n;int sum;vector<int> a(n);for(int i=0;i<n;i++) cin>>a[i];sort(a.begin(),a.end());sum=++a[0];for(int i=1;i<n;i++) sum*=a[i];cout<<sum<<endl;}return 0;
}
C - Target Practice
題目:
思路:
本題遍歷五個(gè)環(huán)并乘以相應(yīng)的值即可,五個(gè)環(huán)我們可以發(fā)現(xiàn)是完全對(duì)稱的狀態(tài),我們可以通過(guò)不斷縮小環(huán)即可。
代碼:
#include<iostream>
#include<map>
#include<vector>
#include<algorithm>
#include<cstring>
using namespace std;
int solve(){string cnt[10];for(int i=0;i<10;i++) cin>>cnt[i];//完全對(duì)稱int k=1;int sum=0;for(int top=0;top<5;top++){int c=0;for(int i=top;i<10-top;i++) if(cnt[i][top]=='X') c++;//i 0-9 j=0 第一列 for(int i=top+1;i<10-top-1;i++) if(cnt[10-top-1][i]=='X') c++;//i 9 j 1-8 最后一行for(int i=top;i<10-top;i++) if(cnt[i][10-top-1]=='X') c++;//i 0-9 j=9 最后一列for(int i=top+1;i<10-top-1;i++) if(cnt[top][i]=='X') c++;//i 0 j 1-8第一行 sum+=c*k; k++;}return sum;
}
int main(){int t;cin>>t;while(t--){int ans=solve();cout<<ans<<endl;}return 0;
}
D - 1D Eraser
題目:
思路:
本題問(wèn)最小多少次能夠?qū)⑵淙境?span style="color:#fe2c24;">W,只需要我們每次遇到B時(shí),都進(jìn)行k個(gè)染色即可
代碼:
#include<iostream>
#include<map>
#include<vector>
#include<algorithm>
#include<cstring>
using namespace std;
int solve(){int ans=0;int n,k;cin>>n>>k;string str;cin>>str;for(int i=0;i<n;){if(str[i]=='B'){ans++;i+=k;} else i++;} return ans;
}
int main(){int t;cin>>t;while(t--){int ans=solve();cout<<ans<<endl;}return 0;
}
E - Building an Aquarium
題目:
思路:
本題考察的時(shí)二分,我們可以假設(shè)答案h初始值為0,然后將其慢慢上移,直到滿足條件,此處不難看出h具有單調(diào)遞增的特點(diǎn),因此我們使用二分進(jìn)行搜索答案,對(duì)于我們搜索出的二分只有當(dāng)高度為h時(shí)所需水量小于等于我們提供的水量才能夠滿足我們的條件,滿足條件則記錄,最終取其最大值。
優(yōu)化:當(dāng)我們判斷水是否滿足時(shí),可以先做一個(gè)排序,因?yàn)楦叨仍叫〉乃枰乃吭蕉?#xff0c;同時(shí)減少由于要遍歷所帶來(lái)的更多的判斷步驟。
代碼:
#include<iostream>
#include<vector>
using namespace std;typedef long long ll;void solve()
{int n, w;cin >> n >> w;vector<ll> a(n);for (int i = 0; i < n; i ++)cin >> a[i];
//此處排序,減少判斷次數(shù)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
題目:
思路:
本題考查的前綴和+滑動(dòng)窗口,我們可以在統(tǒng)計(jì)統(tǒng)計(jì)前i個(gè)的和,那么窗口中的和則為 第r個(gè) - 第l-1個(gè),其次我們可以通過(guò)前綴和的思想來(lái)考慮哪一段樹可以摘(r~r-b[r]),對(duì)于每一段我們通過(guò)滑動(dòng)窗口的思想來(lái)確定邊界。
代碼:
#include<iostream>
#include<stdio.h>
#include<vector>
#include<algorithm>
using namespace std;
#define ll long long void to_do() {ll n, k, ans = 0, sum = 0;cin >> n >> k;vector<ll> cnt_num(n + 1), a(n + 1);vector<ll> cnt_h(n + 1);for (int i = 1; i <= n; i++) {cin >> a[i];cnt_num[i] = cnt_num[i - 1] + a[i];//前綴和,某個(gè)連續(xù)部分的和為cnt_num[r]-cnt_num[l-1]}for (int i = 1; i <= n; i++) cin >> cnt_h[i];ll l = 0, l_max=0;vector<int> b(n + 1);//可摘樹的長(zhǎng)度int idx = 0;for (int r = 1; r <= n; r++){//記錄可摘樹的長(zhǎng)度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;
}