1. 程式人生 > >HDU 1015(字符運算 **)

HDU 1015(字符運算 **)

turn names gif 技術 bool return bits break amp

題意是在一段大寫英文字符中找出 5 個字符通過代入公式運算得到目標值,如有多組字符滿足題意,則輸出字典序最大的一組,否則輸出 no solution。

應該是用深搜做的,但是直接暴力也過了……(應該沒有比下面更樸實的算法了......)

技術分享圖片
 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 int main()
 4 {
 5     std::ios::sync_with_stdio(false);
 6     __int64 aim,tmp;
 7     string s,w;
8 bool f; 9 w = "wxjin"; 10 while(cin >> aim) 11 { 12 cin >> s; 13 f = true; 14 if(aim == 0 && s == "END") break; 15 int len = s.length(); 16 tmp = 0; 17 for(int i = 0; i < len; i++) 18 s[i] = s[i] -
A + 1; 19 for(int i = 0; i < len; i++) 20 for(int u = 0; u < len; u++) 21 for(int p = 0; p < len; p++) 22 for(int l = 0; l < len; l++) 23 for(int k = 0; k < len; k++) 24 if(i!=u && i!=p && i!=l && i!=k)
25 if(i!=u && u!=p && u!=l && u!=k) 26 if(p!=u && i!=p && p!=l && p!=k) 27 if(l!=u && l!=p && i!=l && l!=k) 28 if(k!=u && k!=p && k!=l && i!=k) 29 if(s[i]-s[u]*s[u]+s[p]*s[p]*s[p]-s[l]*s[l]*s[l]*s[l]+s[k]*s[k]*s[k]*s[k]*s[k]== aim) 30 { 31 if(tmp < s[i]*10000+s[u]*1000+s[p]*100+s[l]*10+s[k]) 32 { 33 w[0] = s[i],w[1] = s[u],w[2] = s[p],w[3] = s[l],w[4] = s[k]; 34 f = false; 35 tmp = s[i]*10000+s[u]*1000+s[p]*100+s[l]*10+s[k]; 36 } 37 } 38 39 if(f) cout << "no solution" << endl; 40 else cout << (char)(w[0]+A-1) << (char)(w[1]+A-1) << (char)(w[2]+A-1) << (char)(w[3]+A-1) << (char)(w[4]+A-1) << endl; 41 } 42 return 0; 43 }
View Code

HDU 1015(字符運算 **)