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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

【Luogu】P1013进制位(搜索)

發布時間:2023/11/27 生活经验 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Luogu】P1013进制位(搜索) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目鏈接在這里

? ?這題和蟲食算比較類似。做完這道題可以去做蟲食算。都是搜索一類的題。

? ?這樣  我們分析題目可以發現進制只可能是字母的個數,也就是n-1。為什么?

? ?因為題目要求完整的加法表才算數。如果進制低于n-1,字母就多了;如果進制高,字母就不夠,湊不出一個完整的加法表。所以這題第二問比第一問簡單很多。

? ?再說第一問。可以使用搜索,dfs參數是已經搜的字符個數,如果等于n-1判斷是否合法,合法就可以輸出答案退出程序,不合法就繼續搜。在dfs的時候可以枚舉有哪些字符是沒用過的,再枚舉哪些數字是沒用過的,一一對應。數據范圍很小,可以輕松搞定。

#include<cstdio>
#include<cstring>
#include<iostream>
#include<cstdlib>
#include<map>
using namespace std;
int Map[2000],jd[2000];
int n;
char s[200];
char mp[100][100][20];
char que[100];
bool vis[100];bool Check(){for(int i=1;i<=n;++i){for(int j=1;j<=n;++j){char a=jd[que[i]],b=jd[que[j]];int c=0;for(int k=0;k<strlen(mp[i][j]);++k){c=c*n+jd[mp[i][j][k]];}if(a+b!=c)return 0;}}return 1;
}void dfs(int deep){if(deep==n){if(!Check()){return;}for(int i=1;i<=n;++i)    printf("%c=%d ",que[i],jd[que[i]]);printf("\n");printf("%d",n);exit(0);}for(int i=0;i<n;++i){if(!vis[i]){for(int j=1;j<=n;j++){if(jd[que[j]]==-1){vis[i]=1;jd[que[j]]=i;dfs(deep+1);vis[i]=0;jd[que[j]]=-1;}}}}
}
int main(){cin>>n;n--;scanf("%s",s);for(int i=1;i<=n;++i){scanf("%s",s);Map[s[0]]=i;que[i]=s[0];jd[s[0]]=-1;}for(int i=1;i<=n;++i){scanf("%s",s);char ch=s[0];for(int j=1;j<=n;++j){scanf("%s",s);for(int k=0;k<strlen(s);++k)mp[Map[ch]][j][k]=s[k];}}dfs(0);printf("ERROR!");return 0;
}

?

轉載于:https://www.cnblogs.com/cellular-automaton/p/7467401.html

總結

以上是生活随笔為你收集整理的【Luogu】P1013进制位(搜索)的全部內容,希望文章能夠幫你解決所遇到的問題。

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