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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【20171111】Codevs 1064 虫食算80分

發布時間:2025/5/22 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【20171111】Codevs 1064 虫食算80分 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目描述?Description

?所謂蟲食算,就是原先的算式中有一部分被蟲子啃掉了,需要我們根據剩下的數字來判定被啃掉的字母。來看一個簡單的例子:

?????? 43#9865#045
????+????8468#6633
?????? 44445506978

????其中#號代表被蟲子啃掉的數字。根據算式,我們很容易判斷:第一行的兩個數字分別是5和3,第二行的數字是5。

????現在,我們對問題做兩個限制:

????首先,我們只考慮加法的蟲食算。這里的加法是N進制加法,算式中三個數都有N位,允許有前導的0。

????其次,蟲子把所有的數都啃光了,我們只知道哪些數字是相同的,我們將相同的數字用相同的字母表示,不同的數字用不同的字母表示。如果這個算式是N進制的,我們就取英文字母表午的前N個大寫字母來表示這個算式中的0到N-1這N個不同的數字:但是這N個字母并不一定順序地代表0到N-1)。輸入數據保證N個字母分別至少出現一次。



????????????BADC
??????+????CBDA
????????????DCCC

????上面的算式是一個4進制的算式。很顯然,我們只要讓ABCD分別代表0123,便可以讓這個式子成立了。你的任務是,對于給定的N進制加法算式,求出N個不同的字母分別代表的數字,使得該加法算式成立。輸入數據保證有且僅有一組解,

輸入描述?Input Description

輸入包含4行。第一行有一個正整數N(N<=26),后面的3行每行有一個由大寫字母組成的字符串,分別代表兩個加數以及和。這3個字符串左右兩端都沒有空格,從高位到低位,并且恰好有N位。

輸出描述?Output Description

??輸出包含一行。在這一行中,應當包含唯一的那組解。解是這樣表示的:輸出N個數字,分別表示A,B,C……所代表的數字,相鄰的兩個數字用一個空格隔開,不能有多余的空格。

樣例輸入?Sample Input

5
ABCED
BDACE
EBBAA

樣例輸出?Sample Output

1 0 3 4 2

數據范圍及提示?Data Size & Hint

對于30%的數據,保證有N<=10;
對于50%的數據,保證有N<=15;
對于全部的數據,保證有N<=26。

搜索,為了盡快剪枝,我選擇了按照豎式從上至下,從右至左逐列檢查,一旦不符就剪枝,然而還有兩個點沒過~~ 1 //begin at 15:06 2 #include<stdio.h> 3 int n; 4 int equ[3][27]; 5 char ch[3][27]; 6 int dataLet[27]; 7 char dataNum[27]; 8 int search(int x,int y,int extra)//0=failure,1=success 9 { 10 if(x==3) 11 { 12 int temp,ans; 13 if(y!=0)//pre last line 14 { 15 temp=(dataLet[equ[0][y]]+dataLet[equ[1][y]]+extra)%n; 16 if(temp!=dataLet[equ[2][y]])//wrong 17 return 0; 18 else 19 { 20 extra=(dataLet[equ[0][y]]+dataLet[equ[1][y]]+extra)/n; 21 ans=search(0,y-1,extra); 22 if(ans) 23 return 1; 24 else 25 return 0; 26 } 27 } 28 else//last last line 29 { 30 temp=(dataLet[equ[0][y]]+dataLet[equ[1][y]]+extra)%n; 31 extra=(dataLet[equ[0][y]]+dataLet[equ[1][y]]+extra)/n; 32 if(temp!=dataLet[equ[2][y]]||extra)//need to extra or wrong 33 return 0; 34 else 35 return 1; 36 } 37 } 38 else 39 { 40 int i; 41 int ans; 42 if(dataLet[equ[x][y]]!=-1)//used 43 ans=search(x+1,y,extra); 44 else 45 { 46 for(i=0;i<n;i++) 47 { 48 if(dataNum[i]!=-1) 49 continue; 50 dataLet[equ[x][y]]=i; 51 dataNum[i]=equ[x][y]+'A'; 52 ans=search(x+1,y,extra); 53 if(ans) 54 return ans; 55 dataLet[equ[x][y]]=dataNum[i]=-1;//used 56 } 57 } 58 return ans; 59 } 60 61 } 62 void testPrint(int input) 63 { 64 printf("%d ",input); 65 } 66 void get(char *output) 67 { 68 scanf("%s",output); 69 getchar(); 70 } 71 int main() 72 { 73 scanf("%d",&n); 74 ch[0][0]=getchar(); 75 int i,j; 76 for(i=0;i<n;i++) 77 { 78 dataLet[i]=-1; 79 dataNum[i]=-1; 80 } 81 get(ch[0]); 82 get(ch[1]); 83 get(ch[2]); 84 for(i=0;i<3;i++) 85 { 86 for(j=0;j<n;j++) 87 { 88 equ[i][j]=ch[i][j]-'A';//turn to int 89 } 90 } 91 search(0,n-1,0); 92 for(i=0;i<n-1;i++) 93 { 94 printf("%d ",dataLet[i]); 95 } 96 printf("%d\n",dataLet[i]); 97 return 0; 98 } 99 //end at 15:57

?

轉載于:https://www.cnblogs.com/CXSheng/p/7819327.html

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的【20171111】Codevs 1064 虫食算80分的全部內容,希望文章能夠幫你解決所遇到的問題。

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