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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

产生数(信息学奥赛一本通-T1361)

發布時間:2025/3/17 编程问答 12 豆豆
生活随笔 收集整理的這篇文章主要介紹了 产生数(信息学奥赛一本通-T1361) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

【題目描述】

給出一個整數n(n≤2000)和k個變換規則(k≤15)。規則:

????① 1個數字可以變換成另1個數字;

????② 規則中,右邊的數字不能為零。

例如:n=234,k=2規則為2 → 5,3 → 6

上面的整數234經過變換后可能產生出的整數為(包括原數)234,534,264,564共4種不同的產生數。

求經過任意次的變換(0次或多次),能產生出多少個不同的整數。僅要求輸出不同整數個數。

【輸入】

n

k

x1 x2 … xn

y1 y2 … yn

【輸出】

格式為一個整數(滿足條件的整數個數)。

【輸入樣例】

234
2
2 5
3 6

【輸出樣例】

4

【源程序】

#include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> #include<string> #include<cstdlib> #include<queue> #include<vector> #define INF 0x3f3f3f3f #define PI acos(-1.0) #define N 10001 #define MOD 123 #define E 1e-6 using namespace std; int vis[N]; char q[N][10]; struct node{int x;int y; }b[20]; int turn(char s[],int len) {int ans=0;for(int i=0;i<len;i++){ans*=10;ans+=s[i]-'0';}return ans; } int main() {char s_t[10];char s[10];int k;cin>>s;int len=strlen(s);cin>>k;for(int i=1;i<=k;i++)cin>>b[i].x>>b[i].y;int head=1,tail=1;int cnt=1;strcpy(q[tail],s);tail++;vis[turn(s,len)]=1;while(head<tail){for(int i=1;i<=k;i++){strcpy(s_t,q[head]);for(int j=0;j<len;j++)if(s_t[j]==b[i].x+'0'){s_t[j]=b[i].y+'0';int d=turn(s_t,len);if(vis[d]==0){vis[d]=1;strcpy(q[tail],s_t);tail++;cnt++;}strcpy(s_t,q[head]);//初始化s_t}}head++;}cout<<cnt<<endl;return 0; }

?

總結

以上是生活随笔為你收集整理的产生数(信息学奥赛一本通-T1361)的全部內容,希望文章能夠幫你解決所遇到的問題。

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