摘要:題解首先,容易觀察到將轉到,,,,狀態,并將進行與上相同操作后得到了再將轉至,,,,所需要的步數即為答案。
題目大意:給定一個全是小寫字符的字符串,找出有幾個為 edgnb 的字串。
題解:暴力模擬即可。
#include #define int long longusing namespace std;int n,m,ans;void solve(){ string s; cin>>s; string sr="edgnb"; for(int i=0;i+5<=s.size();i++){ int flag=1; for(int j=0;j<5;j++){ if(s[i+j]!=sr[j]) flag=0; } if(flag) ans++; } cout<<ans;}signed main(){ int t=1; //cin>>t; while(t--) solve(); }
隊友寫的,先放個代碼,等隊友寫題解
#include #define int long longusing namespace std;const int N=1e5+5;string s;int f[N];set <char> se;int vis[N];void change(int len){ se.clear(); for(int i=len;i>=0;i--) { if(se.count(s[i])==0) f[s[i]-"a"]=se.size(); se.insert(s[i]); }}string sr[N];char son[33]={"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"};signed main(){ int n; cin>>n; cin>>s; for(int i=1;i<=n;i++) { change(i-1); for(int j=0;j<i;j++) { sr[i]+=son[f[s[j]-"a"]]; //cout< } //cout< } sort(sr+1,sr+1+n); cout<<sr[n]<<endl;}
題目大意:有一個鎖,起始狀態是 a 0 a_0 a0?, a 1 a_1 a1?, a 2 a_2 a2?, a 3 a_3 a3? ,每次只能將相鄰的幾個位進行順時針旋轉一次或逆時針旋轉一次,請問移動到 b 0 b_0 b0?, b 1 b_1 b1?, b 2 b_2 b2?, b 3 b_3 b3? 最少需要幾步。
題解:
首先,容易觀察到將 a 0 a_0 a0?, a 1 a_1 a1?, a 2 a_2 a2?, a 3 a_3 a3? 轉到 0,0,0,0,狀態,并將 b 0 b_0 b0?, b 1 b_1 b1?, b 2 b_2 b2?, b 3 b_3 b3? 進行與上相同操作后得到了 c 0 c_0 c0?, c 1 c_1 c1?, c 2 c_2 c2?, c 3 c_3 c3? 再將 c 0 c_0 c0?, c 1 c_1 c1?, c 2 c_2 c2?, c 3 c_3 c3?轉至 0,0,0,0,所需要的步數即為答案。
發現所有的答案不超過10000種,對于每次輸入的a與b,我們都可以計算出 c 0 c_0 c0?, c 1 c_1 c1?, c 2 c_2 c2?, c 3 c_3 c3? = b 0 b_0 b0?, b 1 b_1 b1?, b 2 b_2 b2?, b 3 b_3 b3? - a 0 a_0 a0?, a 1 a_1 a1?, a 2 a_2 a2?, a 3 a_3 a3?并得到ans【 c 0 c_0 c0?, c 1 c_1 c1?, c 2 c_2 c2?, c 3 c_3 c3?】
所以我們只需要預處理出至多10000組答案即可。
其次考慮預處理ans數組,容易分析得到任何時候可選擇連續區間只有10種,且同一區間選擇至多在同一方向旋轉9次。于是便對每種區間選擇考慮同方向旋轉1-9次(旋轉6,7,8,9次即可當作反向旋轉4,3,2,1次)。
隨后便可從0,0,0,0開始通過bfs處理所有ans。
代碼實現:
#include #define int long longusing namespace std;int n,m,t;int u,v,w;int ans[10005];struct node{ int a,b,c,d; node operator +(node t){ return {(a+t.a)%10,(b+t.b)%10,(c+t.c)%10,(d+t.d)%10}; } node operator *(int t){ return {t*a,t*b,t*c,t*d}; } node operator - (node t){ return {(a+10-t.a)%10,(b+10-t.b)%10,(c+10-t.c)%10,(d+10-t.d)%10}; }}a[10005];node p1[20];node f(int x){ int a,b,c,d; d=x%10;x/=10; c=x%10;x/=10; b=x%10;a=x/10; return {a,b,c,d};}queue<int> q;int f1(node t){return t.a*1000+t.b*100+t.c*10+t.d;}int geti(int x,int y,int z){ node t=f(x)+p1[y]*z; return f1(t);}void solve(){ int l,r; cin>>l>>r; node ll=f(l),rr=f(r); cout<<ans[f1(rr-ll)]<<"/n";}signed main(){ int p[20]={0,1,11,111,1111,10,110,1110,100,1100,1000}
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/124494.html
摘要:第五題對稱二叉樹難度簡單給定一個二叉樹,檢查它是否是鏡像對稱的。第十六題最大連續的個數難度簡單給定一個二進制數組,計算其中最大連續的個數。第十八題平方數之和難度簡單給定一個非負整數,你要判斷是否存在兩個整數和,使得。 寫在前面 最近忙著調教新裝備,沒有及時的寫題解,但是沒有在偷懶沒刷題喔~來認真整理下最近做的題目~ 之前考慮按tag來刷題,后來收到了推薦的leetcode題解,就根據上...
摘要:大家好我是小小明,今天給大家演示如何使用直接采集百度指數的數據。本文不演示如何使用自動化工具采集百度指數,為了采集更簡單將直接讀取并解析接口。 大家好我是小小明,今...
摘要:不過可能還沒有抓到動態規劃的真諦,總覺得哪里需要再校正下思路。這題也是動態規劃的題目,目標總是要分解為子問題??偨Y看算法圖解的時候,涉及動態規劃的小結中有這樣的每種動態規劃解決方案都涉及網格。 寫在前面的話 感覺做題越多遇到的寫法越多,有種躍躍欲試的感覺~ 認真做題 第一題 70. 爬樓梯難度:簡單假設你正在爬樓梯。需要 n 階你才能到達樓頂。每次你可以爬 1 或 2 個臺階。你有多少...
閱讀 2344·2021-11-23 09:51
閱讀 1998·2021-10-14 09:43
閱讀 2759·2021-09-27 13:35
閱讀 1143·2021-09-22 15:54
閱讀 2494·2021-09-13 10:36
閱讀 3783·2019-08-30 15:56
閱讀 3404·2019-08-30 14:09
閱讀 1710·2019-08-30 12:57