蟲食算(搜尋 剪枝)

2022-07-24 07:54:12 字數 909 閱讀 6808

題意 給乙個3個n進製的有n個字母組成的序列,使第乙個數列和第二個數列加起來等於第三個數列的情況成立。

蒟蒻調了一上午+半下午 感覺我碼力極差

考慮乙個剪枝,比如a,b,c的情況,要麼是(a+b)%n=c,要麼是(a+b+1)%n=c(考慮了進製)

** 感覺我打麻煩了 其實不太適合參考

#include#include#include#includeusing namespace std;

const int n=50;

int id[n],id_map[n],x;

char a[n],b[n],c[n];

void dfs(int n,int now)for(int i=1;i<=n;i++)

if(id[a[n]-'a']<0)

if(id_map[i]) continue;

id[a[n]-'a']=i;id_map[i]=1;

if(id[b[n]-'a']<0)

for(int j=0;j<=x-1;j++)

id_map[j]=1;if(id_map[(i+j+now)%x]&&id[c[n]-'a']<0)

if(id[c[n]-'a']<0)else

}else

if(id_map[(i+j+now)%x]&&id[c[n]-'a']<0)

if(id[c[n]-'a']<0)else

}id[a[n]-'a']=-1;id_map[i]=0;

} }else

id_map[j]=1;if(id_map[(i+j+now)%x]&&id[c[n]-'a']<0)

if(id[c[n]-'a']<0)else

}elseelse

} }

}int main()

搜尋 蟲食算

p1135 蟲食算 noip 時間限制 10000 ms 空間限制 65536 kb 問題描述 所謂蟲食算,就是原先的算式中有一部分被蟲子啃掉了,需要我們根據剩下的數字來判定被啃掉的字母。來看乙個簡單的例子 43 9865 045 8468 6633 44445506978 其中 號代表被蟲子啃掉的...

noip 蟲食算 搜尋

描述 所謂蟲食算,就是原先的算式中有一部分被蟲子啃掉了,需要我們根據剩下的數字來判定被啃掉的字母。來看乙個簡單的例子 43 9865 045 8468 6633 44445506678 其中 號代表被蟲子啃掉的數字。根據算式,我們很容易判斷 第一行的兩個數字分別是5和3,第二行的數字是5。現在,我們...

NOIP2004提高組 蟲食算(搜尋剪枝)

30pts 善用next permutation 50pts 先列舉每一位是否有進製,設進製為di 0 1,然後a i b i d i 1 10d i c i 移項後為a i b i c i 10d i d i 1 n位形成n個方程組,可以進行高斯消元,時間複雜度o 2 n n 3 100pts 高...