日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

2016年第七届蓝桥杯 - 省赛 - C/C++大学A组 - I. 密码脱落

發布時間:2024/5/6 c/c++ 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 2016年第七届蓝桥杯 - 省赛 - C/C++大学A组 - I. 密码脱落 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目

X星球的考古學家發現了一批古代留下來的密碼。
這些密碼是由A、B、C、D 四種植物的種子串成的序列。
仔細分析發現,這些密碼串當初應該是前后對稱的(也就是我們說的鏡像串)。
由于年代久遠,其中許多種子脫落了,因而可能會失去鏡像的特征。

你的任務是:
給定一個現在看到的密碼串,計算一下從當初的狀態,它要至少脫落多少個種子,才可能會變成現在的樣子。

輸入一行,表示現在看到的密碼串(長度不大于1000)
要求輸出一個正整數,表示至少脫落了多少個種子。

例如,輸入:
ABCBA
則程序應該輸出:
0

再例如,輸入:
ABDCDCBABC
則程序應該輸出:
3

資源約定:
峰值內存消耗 < 256M
CPU消耗 < 1000ms

請嚴格按要求輸出,不要畫蛇添足地打印類似:“請您輸入…” 的多余內容。

所有代碼放在同一個源文件中,調試通過后,拷貝提交該源碼。

注意: main函數需要返回0
注意: 只使用ANSI C/ANSI C++ 標準,不要調用依賴于編譯環境或操作系統的特殊函數。
注意: 所有依賴的函數必須明確地在源文件中 #include , 不能通過工程設置而省略常用頭文件。

提交時,注意選擇所期望的編譯器類型。

代碼

#include <stdio.h> #include <cstring> #include <algorithm>using namespace std;int dfs(char *s, int left, int right,int cnt); char s[1000]; int main(int argc, const char * argv[]) {scanf("%s",&s);int len=strlen(s);int ans=dfs(s,0,len-1,0);printf("%d\n",ans);return 0; }int dfs(char *s, int left, int right,int cnt) {if(left>=right)return cnt;if(*(s+left)!=*(s+right))//兩端不等return min(dfs(s,left+1,right,cnt+1),dfs(s,left,right-1,cnt+1));elsereturn dfs(s,left+1,right-1,cnt); } #include <stdio.h> #include <iostream> #include <cstring> #include <algorithm> using namespace std; char s[1000];char *rev(char *s) {int len = strlen(s);//sizeof(s) / sizeof(char);char *ans = (char*)malloc(len* sizeof(char));//(char *) malloc(sizeof(s));for (int i = 0; i < len; ++i) {ans[i] = s[len - 1 - i];}return ans; }int lcs(const char *s1, const char *s2,int len) {int dp[len][len];for (int i = 0; i < len; ++i) {if(s1[i]==s2[0])dp[0][i]=1;else dp[0][i]=(i==0?0:dp[0][i-1]);}for (int j = 0; j < len; ++j) {if(s2[j]==s1[0])dp[j][0]=1;else dp[j][0]= (j==0 ? 0:dp[j-1][0]);}for (int i = 1; i < len; ++i) {for (int j = 1; j < len; ++j) {if(s2[i]==s1[j])dp[i][j]= dp[i-1][j-1]+1;else dp[i][j]=max(dp[i-1][j],dp[i][j-1]);}}return dp[len-1][len-1]; }int main(int argc, const char *argv[]) {scanf("%s", &s);int len = strlen(s);int l = lcs(s, rev(s),len);printf("%d",len-l);return 0; }

總結

以上是生活随笔為你收集整理的2016年第七届蓝桥杯 - 省赛 - C/C++大学A组 - I. 密码脱落的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。