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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

loj.ac:#10024. 「一本通 1.3 练习 3」质数方阵

發(fā)布時(shí)間:2025/4/16 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 loj.ac:#10024. 「一本通 1.3 练习 3」质数方阵 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

CSDN的博客
友鍵

題目描述

質(zhì)數(shù)方陣是一個(gè)\(5×5\)的方陣,每行、每列、兩條對(duì)角線上的數(shù)字可以看作是五位的素?cái)?shù)。方格中的行按照從左到右的順序組成一個(gè)素?cái)?shù),而列按照從上到下的順序。兩條對(duì)角線也是按照從左到右的順序來組成。這些素?cái)?shù)每一位上的數(shù)之和必須相等。 左上角的數(shù)字是預(yù)先定好的。 一個(gè)素?cái)?shù)可能在方陣中重復(fù)多次。不計(jì)含有前導(dǎo) \(0\) 的五位素?cái)?shù),如\(00003\) 不是五位素?cái)?shù)。

給出每一位上的數(shù)之和,以及左上角的數(shù)字,請(qǐng)輸出方陣所有可能的填數(shù)方案。
如果不只有一個(gè)解,將它們?nèi)枯敵?#xff08;按照這 \(25\) 個(gè)數(shù)字組成的 \(25\) 位數(shù)的大小排序)。

輸入格式

一行,包括兩個(gè)被空格分開的整數(shù):每一位上的數(shù)之和,以及左上角的數(shù)字。

輸出格式

對(duì)于每一個(gè)找到的方案輸出 \(5\) 行,每行 \(5\) 個(gè)字符,每行可以轉(zhuǎn)化為一個(gè) \(5\) 位的質(zhì)數(shù)。在兩組方案中間輸出一個(gè)空行。如果沒有解就單獨(dú)輸出一行 \(NONE\)

樣例

樣例輸入
11 1
樣例輸出
11351
14033
30323
53201
13313

11351
33203
30323
14033
33311

13313
13043
32303
50231
13331


不怎么華麗的分割線

這道題是真的水難,暴力中還帶著技巧。
總的來說,我的填寫方法有點(diǎn)奇特

填寫順序騛常奇特
這樣填是我隨便想的,結(jié)果過了 (除先填左上到右下)
代碼很丑,照著填寫順序思路,代碼寫的很通俗,只要你不被判斷繞暈

#include<cstdio> #include<cstring> #include<algorithm> using namespace std; struct node {int map[10][10]; }ans[110000]; bool cmp(node a,node b) {for(int i=0;i<=4;i++)for(int j=0;j<=4;j++)if (a.map[i][j]!=b.map[i][j])return a.map[i][j]<b.map[i][j]; } int a[10][10],n,k; bool b[110000]; void bt() {k++;for(int i=0;i<=4;i++)for(int j=0;j<=4;j++)ans[k].map[i][j]=a[i][j]; } void dfs6() {for(int i=1;i<=9;i++)if(a[0][0]+a[0][4]+i<=n&&a[1][1]+a[2][1]+a[3][1]+i<n&&n-i-a[1][1]-a[2][1]-a[3][1]<=9&&!b[i*10000+a[1][1]*1000+a[2][1]*100+a[3][1]*10+n-i-a[1][1]-a[2][1]-a[3][1]]){a[0][1]=i,a[4][1]=n-i-a[1][1]-a[2][1]-a[3][1];for(int j=1;j<=9;j++)if (a[0][0]+a[0][1]+j+a[0][4]<n&&n-j-a[1][2]-a[2][2]-a[3][2]<=9&&j+a[1][2]+a[2][2]+a[3][2]<n&&n-a[0][0]-a[0][1]-j-a[0][4]<=9&&!b[j*10000+a[1][2]*1000+a[2][2]*100+a[3][2]*10+n-j-a[1][2]-a[2][2]-a[3][2]]&&!b[a[0][0]*10000+a[0][1]*1000+j*100+(n-a[0][0]-a[0][1]-j-a[0][4])*10+a[0][4]]){int n42=n-j-a[1][2]-a[2][2]-a[3][2],n03=n-a[0][0]-a[0][1]-j-a[0][4];if(a[4][0]+a[4][1]+n42+a[4][4]<=n&&n-a[4][0]-a[4][1]-n42-a[4][4]<=9&&n03+a[1][3]+a[2][3]+a[3][3]<=n&&n-n03-a[1][3]-a[2][3]-a[3][3]<=9&&!b[a[4][0]*10000+a[4][1]*1000+n42*100+(n-a[4][0]-a[4][1]-n42-a[4][4])*10+a[4][4]]&&!b[n03*10000+a[1][3]*1000+a[2][3]*100+a[3][3]*10+n-n03-a[1][3]-a[2][3]-a[3][3]]){a[0][2]=j,a[4][2]=n42,a[0][3]=n03,a[4][3]=n-a[4][0]-a[4][1]-n42-a[4][4];bt();a[0][2]=a[4][2]=a[0][3]=a[4][3]=0;}}a[0][1]=a[4][1]=0;} } void dfs5() {for(int i=1;i<=9;i++)if(a[3][3]+i<=n&&a[0][0]+a[1][0]+a[2][0]+i<n&&n-a[0][0]-a[1][0]-a[2][0]-i<=9&&!b[a[0][0]*10000+a[1][0]*1000+a[2][0]*100+i*10+n-a[0][0]-a[1][0]-a[2][0]-i]){a[3][0]=i,a[4][0]=n-a[0][0]-a[1][0]-a[2][0]-i;for(int j=0;j<=9;j++)if(a[1][1]+a[2][1]+j<=n&&a[3][0]+a[3][3]+j<=n&&a[4][0]+a[2][2]+a[1][3]+j<n&&n-a[4][0]-j-a[2][2]-a[1][3]<=9&&!b[a[4][0]*10000+j*1000+a[2][2]*100+a[1][3]*10+n-a[4][0]-j-a[2][2]-a[1][3]]){int n04=n-a[4][0]-j-a[2][2]-a[1][3];if(n04+a[1][4]+a[2][4]+a[4][4]<=n&&n-n04-a[1][4]-a[2][4]-a[4][4]<=9&&!b[n04*10000+a[1][4]*1000+a[2][4]*100+(n-n04-a[1][4]-a[2][4]-a[4][4])*10+a[4][4]]){int n34=n-n04-a[1][4]-a[2][4]-a[4][4];if(a[3][0]+j+a[3][3]+n34<=n&&n-a[3][0]-j-a[3][3]-n34<=9&&!b[a[3][0]*10000+j*1000+(n-a[3][0]-j-a[3][3]-n34)*100+a[3][3]*10+n34]){a[3][1]=j,a[0][4]=n04,a[3][4]=n34,a[3][2]=n-a[3][0]-j-a[3][3]-n34;dfs6();a[3][1]=a[0][4]=a[3][4]=a[3][2]=0;}}}a[3][0]=a[4][0]=0;} } void dfs4() {for(int i=0;i<=9;i++)if(a[1][1]+i<=n&&a[2][0]+a[2][2]+i<=n){a[2][1]=i;for(int j=0;j<=9;j++)if(a[1][3]+j<=n&&a[2][0]+a[2][1]+a[2][2]+j<n&&n-a[2][0]-a[2][1]-a[2][2]-j<=9&&!b[a[2][0]*10000+a[2][1]*1000+a[2][2]*100+j*10+n-a[2][0]-a[2][1]-a[2][2]-j]){a[2][3]=j,a[2][4]=n-a[2][0]-a[2][1]-a[2][2]-j;dfs5();a[2][3]=a[2][4]=0;}a[2][1]=0;} } void dfs3() {for(int i=0;i<=9;i++)if(a[1][0]+a[1][1]+a[1][2]+i<n&&n-a[1][0]-a[1][1]-a[1][2]-i<=9&&a[3][3]+i<=n&&!b[a[1][0]*10000+a[1][1]*1000+a[1][2]*100+i*10+n-a[1][0]-a[1][1]-a[1][2]-i]){a[1][3]=i,a[1][4]=n-a[1][0]-a[1][1]-a[1][2]-i;for(int j=1;j<=9;j++)if(a[0][0]+a[1][0]+j<=n&&a[2][2]+j<=n){a[2][0]=j;dfs4();a[2][0]=0;}a[1][3]=a[1][4]=0;} } void dfs2() {for(int i=1;i<=9;i++)if(a[0][0]+i<=n&&a[1][1]+i<=n){a[1][0]=i;for(int j=0;j<=9;j++)if(a[1][0]+a[1][1]+j<=n&&a[2][2]+j<=n){a[1][2]=j;dfs3();a[1][2]=0;}a[1][0]=0;} } void dfs1() {for(int i=0;i<=9;i++)if(a[0][0]+i<=n){a[1][1]=i;for(int j=0;j<=9;j++)if(a[0][0]+a[1][1]+j<=n) {a[2][2]=j;for(int g=0;g<=9;g++)if(a[0][0]+a[1][1]+a[2][2]+g<=n&&n-a[0][0]-a[1][1]-a[2][2]-g<=9&&!b[a[0][0]*10000+a[1][1]*1000+a[2][2]*100+g*10+n-a[0][0]-a[1][1]-a[2][2]-g]){a[3][3]=g,a[4][4]=n-a[0][0]-a[1][1]-a[2][2]-g;dfs2();a[3][3]=a[4][4]=0;}a[2][2]=0;}a[1][1]=0;} } int prime[110000],pr=0; int main() {scanf("%d%d",&n,&a[0][0]);//memset(prime,0,sizeof(prime));memset(b,false,sizeof(b));for(int i=2;i<=100000;i++){if(b[i]==false){prime[++pr]=i;}for(int j=1;(j<=pr)&& (i*prime[j]<=100000);j++){b[i*prime[j]]=true;if(i%prime[j]==0) break;}}dfs1();if(!k)printf("NONE\n");else{sort(ans+1,ans+k+1,cmp);for(int l=1;l<=k;l++){for(int i=0;i<=4;i++){for(int j=0;j<=4;j++)printf("%d",ans[l].map[i][j]);printf("\n");}printf("\n");}}return 0; }

愿各位能活著看到這

(阿門)

轉(zhuǎn)載于:https://www.cnblogs.com/tktp-ht/p/10729121.html

總結(jié)

以上是生活随笔為你收集整理的loj.ac:#10024. 「一本通 1.3 练习 3」质数方阵的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

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