Jzoj 2198 簡單數迷

2021-09-19 08:06:34 字數 1110 閱讀 8077

現在我們需要解決的是乙個更簡單的數謎問題。簡單數謎的形狀是乙個(n+

1)(n+1)

(n+1

)行乘(m+

1)(m+1)

(m+1

)列的矩形。而簡單數謎也只有兩種要求,就是行要求和列要求,且分別處於第一行和第一列,其他格仔則是空格,而左上角是忽略不計的

給一些簡單數謎填好了其中的一些空格。現在要完成這些簡單數謎

如圖3

33所示,2

22和9

99是已經填好的空格,圖4

44則是乙個基於圖3

33的乙個可能的解答

很明顯的乙個搜尋

做好預處理,關於每行每列填過的數字。在每個空格處填上乙個該列該行都沒填過的數,並更新當前列和行的總和

若大於行或列的要求,則不需要往下遞迴

#includeusing namespace std;

int t;

int n,m,cs,end;

int col[11],lin[11],a[11][11],colw[11],linw[11],cola[11][11],lina[11][11],ans[11][11];

bool check()

void dfs(int lev)

return;

} int x=lev/m+1,y=lev%m;

if(y==0) y=m,x--;

if(x>1&&y==1)

if(a[x][y]>0) dfs(lev+1);

else

for(int i=1;i<=9;i++)

} }}

int main()

}dfs(1);

if(cs==0) printf("no answer.\n");

else if(cs==1)

for(int i=1;i<=n;i++)

else if(cs==2)

printf("not unique.\n");

}}

簡單數字dp

題目鏈結 題意 n,m 中不包含4和62的數的個數 include include include include using namespace std int dp 10 10 dp i j 表示最高位數字為i,長度為j的的數字串中滿足無4,無62的串的總數 void init 求得小於n的串中...

Acdream Xor 簡單數學

給定乙個集合a,乙個集合b,a,b元素個數相等,然後問是否存在乙個數x使得a中的元素均與這個數進行按位異或操作後的結果為b集合,如果存在輸出最小的數,不存在輸出 1。思路 由於給定的n為奇數,所以能夠根據二進位制位的最右邊位確定唯一的分組,然後只需要判定這個分組是否合理即可。分組是這樣劃分的,如有a...

簡單數學函式

簡單數學函式 1 題目描述 已知函式f x x2 2 2x根據輸入的x值計算f x 運算結果不超過int範圍,x 0 輸入輸入多組測試資料,每組一行為x值 輸出每個測試輸出資料一行 x int input 輸入x if x 0 y x 2 2 2 x print y 題目描述 已知函式,輸入a b的...