【ybt高效進階1-4-3】【luogu P1092】蟲食算
蟲食算
題目連結:ybt高效進階1-4-3 \ luogu P1092
題目大意
一個 A+B=C 的 N 進位制式子(三個數都是 N 進位制的 N 位數),已知三個數的某些位上的數是相等的,別的就不相等。
問你你要怎麼填才能使等式成立。
只有一種解。
思路
我們考慮從低位向高位不斷確定填的數。
至於不確定的就每一個都試一遍,那其實就是 dfs。
然後為了縮短時間,我們每確定一個數就要把已經確定的式子和只是不知道進位的式子都看一遍,看是否合法。
已經確定的很簡單,不知道進不進位的就兩種情況都看(反正最多隻能進
1
1
1,你是相加),要是都式子不成立就不行。
然後就按著這個方法 dfs,遇到解就輸出,退出。
程式碼
#include<cstdio>
using namespace std;
int n, num[31], a[4][31];
bool use[31], yes;
char ch[31];
void write() {
for (int i = 1; i <= n; i++)
printf("%d ", num[i]);
}
void dfs(int now, int noww, int bu) {
if (!now && !bu) {
write();
yes = 1;
return ;
}
if (!now) {
return ;
}
for (int i = now - 1; i >= 1; i--)
if (num[a[1][i]] >= 0 && num[a[2][i]] >= 0 && num[a[3][i]] >= 0 && (num[a[1][i]] + num[a[2][i]]) % n != num[a[3][i]] && (num[a[1][i]] + num[a[2][i]] + 1) % n != num[a[3][i]])
//已經出現了確定一定不符合的式子
return ;
if (num[a[noww][now]] >= 0) {
if (noww == 3) {//如果這一列搞好了要看是否符合(下面也是一個道理)
if ((num[a[1][now]] + num[a[2][now]] + bu) % n != num[a[3][now]]) return ;
dfs(now - 1, 1, (num[a[1][now]] + num[a[2][now]] + bu) / n);
}
else dfs(now, noww + 1, bu);
}
else {
for (int i = 0; i < n; i++)
if (!use[i]) {
use[i] = 1;
num[a[noww][now]] = i;
if (noww == 3) {
if (!((num[a[1][now]] + num[a[2][now]] + bu) % n != num[a[3][now]]))
dfs(now - 1, 1, (num[a[1][now]] + num[a[2][now]] + bu) / n);
}
else dfs(now, noww + 1, bu);
num[a[noww][now]] = -1;
use[i] = 0;
}
}
}
int main() {
scanf("%d", &n);
for (int i = 1; i <= n; i++)
num[i] = num[i] = num[i] = -1;
scanf("%s", &ch);
for (int i = 0; i < n; i++)
a[1][i + 1] = ch[i] - 'A' + 1;
scanf("%s", &ch);
for (int i = 0; i < n; i++)
a[2][i + 1] = ch[i] - 'A' + 1;
scanf("%s", &ch);
for (int i = 0; i < n; i++)
a[3][i + 1] = ch[i] - 'A' + 1;
dfs(n, 1, 0);
return 0;
}
相關文章
- 【ybt高效進階1-5-1】走迷宮
- 爬蟲進階:反反爬蟲技巧爬蟲
- 位運算進階
- node爬蟲進階之——登入爬蟲
- Python爬蟲進階之APP逆向(三)Python爬蟲APP
- python爬蟲進階必備之代理Python爬蟲
- 【YbtOJ高效進階 遞推-2】奇怪漢諾塔
- 【ybtoj 高效進階 1.4】【深搜】數獨遊戲遊戲
- 爬蟲使用代理時能更高效進行的因素爬蟲
- Python爬蟲進階之JS逆向入門Python爬蟲JS
- Python爬蟲進階之會話和CookiesPython爬蟲會話Cookie
- 程式設計師的macOS系列:高效Alfred進階程式設計師MacAlfred
- HPC高效能運算知識: 計算架構演進架構
- Scanner的進階使用——基礎計算
- Python 爬蟲從入門到進階之路(十六)Python爬蟲
- Python 爬蟲從入門到進階之路(十七)Python爬蟲
- Python 爬蟲從入門到進階之路(十八)Python爬蟲
- Python 爬蟲從入門到進階之路(二)Python爬蟲
- Python 爬蟲從入門到進階之路(三)Python爬蟲
- Python 爬蟲從入門到進階之路(十二)Python爬蟲
- Python 爬蟲從入門到進階之路(十五)Python爬蟲
- Python 爬蟲從入門到進階之路(八)Python爬蟲
- Python 爬蟲從入門到進階之路(九)Python爬蟲
- Python 爬蟲從入門到進階之路(十)Python爬蟲
- Python 爬蟲從入門到進階之路(十一)Python爬蟲
- Python 爬蟲從入門到進階之路(六)Python爬蟲
- Python 爬蟲從入門到進階之路(七)Python爬蟲
- 爬蟲進階之去哪兒酒店(國內外)爬蟲
- 有趣的二進位制2—高效位運算
- 【動畫進階】神奇的背景,生化危機4日食 Loading 動畫還原動畫
- 雲端計算進階之路——與ACE相約
- Python爬蟲進階之JS逆向土地市場網!Python爬蟲JS
- Python爬蟲進階之代理的基本原理Python爬蟲
- Python爬蟲進階之urllib庫使用方法Python爬蟲
- python入門與進階篇(七)之原生爬蟲Python爬蟲
- 爬蟲進階教程:極驗(GEETEST)驗證碼破解教程爬蟲
- 爬蟲進階路程2——centos安裝各個版本chrome爬蟲CentOSChrome
- Python爬蟲學習之(二)| urllib進階篇Python爬蟲