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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

luogu P1037 【产生数】

發(fā)布時間:2025/6/17 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 luogu P1037 【产生数】 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

貌似都是用佛洛依德寫的,我就來個\(DFS\)搜索的方法吧。

首先通過字符串讀入來讀入這個數(shù)字。

然后對每一位數(shù)字進行\(DFS\),每搜索到一個數(shù)字計數(shù)器加一。最后根據(jù)分步計算原理,將每位數(shù)可擴展的數(shù)進行相乘輸出即可。

另外第四、第五組數(shù)據(jù)較大好久沒有寫高精度寫掛了好幾次滑稽。


Coding:

#include<bits/stdc++.h> using namespace std;string num; int k,a[20],b[20],ans = 0,sum[30] = {};//ans每一位可以擴展多少個數(shù)字 bool vis[10] = {};//vis記錄當前數(shù)字有沒有被搜過inline int read()//快讀 {int x = 0;char ch = getchar();while(ch < '0' || ch > '9') ch = getchar();while(ch >= '0' && ch <= '9'){x = (x<<3)+(x<<1) + ch-'0';ch = getchar();}return x; }inline void mul(int a[],int b)//低精度乘高精度 {for(int i = 1;i <= a[0];i++){a[i] *= b;}for(int i = 1;i <= a[0];i++){if(a[i] >= 10){a[i+1] += a[i]/10;a[i] %= 10;if(i == a[0]) a[0]++;}} }inline void dfs(int x) {vis[x] = 1;//每搜到一個打個標記ans++;for(int i = 1;i <= k;i++){if(a[i] == x && !vis[b[i]]) dfs(b[i]);//如果符合且未被搜索} }int main() {cin >> num;k = read();sum[0] = 1;sum[1] = 1;for(int i = 1;i <= k;i++){a[i] = read();b[i] = read();}for(int i = 0;i < num.size();i++){dfs(num[i]-'0');mul(sum,ans);memset(vis,0,sizeof(vis));//消除影響ans = 0;}for(int i = sum[0];i >= 1;i--) printf("%d",sum[i]);putchar('\n');return 0; }

轉(zhuǎn)載于:https://www.cnblogs.com/Mark-X/p/11404645.html

《新程序員》:云原生和全面數(shù)字化實踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

以上是生活随笔為你收集整理的luogu P1037 【产生数】的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。