temp

 1 /*
 2 - 最开始用全排列
 3 - 突然发现有13位, 但是只用了12位 
 4 - ......
 5 - 可能只能搜索了, 这里我想深搜似乎可以做...吧 
 6 */
 7 #include<iostream>
 8 #include<cstring>
 9 #include<string>
10 #include<algorithm>
11 
12 using namespace std;
13 
14 // int a[14] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13};
15 int t[14] = {0};
16 bool book[14];
17 long long s = 0;
18 
19 bool judge(int k)
20 {    // cout<<"JUDGE"<<'\n';
21     switch(k)
22     {
23         case 3:{
24             return t[1] + t[2] == t[3];
25             break;
26         }
27         case 6:{
28             return t[4] - t[5] == t[6];
29             break;
30         }
31         case 9:{
32             return t[7] * t[8] == t[9];
33             break;
34         }
35         case 12:{    // 这里注意一下万一出现浮点数了呢~ 所以要移项变号
36             return t[12]*t[11] == t[10];
37             printf("%d -- %d -- %d\n", t[1], t[2], t[3]);
38             printf("%d -- %d -- %d\n", t[4], t[5], t[6]);
39             printf("%d -- %d -- %d\n", t[7], t[8], t[9]);
40             printf("%d -- %d -- %d\n", t[10], t[11], t[12]);
41             s++;
42             break;
43         }
44         default:return false;break;
45     }
46 }
47 
48 void DFS(int n)
49 {    // 每填完三个数就判断, 回溯剪枝
50     if(n == 13) return;
51     for(int i=1;i<14;i++){
52         if(book[i])    // 访问过 
53             continue;
54         t[n] = i;
55         book[i] = true;
56         if(n%3 == 0 && !judge(n)){    // 条件不符合 
57             book[i] = false;
58             continue;
59         }
60         DFS(n+1);
61         book[i] = false;
62     }
63     return;
64 } 
65 
66 int main()
67 {
68     memset(t, 0, sizeof(t));
69     memset(book, false, sizeof(book));
70     
71     DFS(1);
72     
73     cout<<s<<'\n';
74     
75     return 0;
76 }
77 
78 /*
79 while(next_permutation(a+1, a+14))
80     {
81         if(a[1] + a[2] != a[3])
82             continue;
83         if(a[4] - a[5] != a[6])
84             continue;
85         if(a[7] * a[8] != a[9])
86             continue;
87         if(a[11]*a[12] != a[10])
88             continue;
89         s++;
90     }
91     cout<<s<<'\n';
92 */

 

 1 /*
 2 * 加法变乘法 
 3 */
 4 #include<iostream>
 5 #include<cstring>
 6 #include<string>
 7 #include<algorithm>
 8 
 9 using namespace std;
10 
11 const int z = 2015;
12 int s = 1225;
13 
14 int main()
15 {
16     /*
17     for(int i=1;i<47;i++){
18         for(int j=3;j<49;j++){
19             int x = i*(i+1);
20             int y = j*(j+1);
21             if(s + x + y - i - (i+1) - j - (j+1) == z){
22                 cout<<i<<'\n';
23             }
24         }
25     }
26     */
27     cout<<16<<'\n';
28     return 0;
29 }
30 /*
31 10
32 16
33 24
34 27
35 */
 1 #include<iostream>
 2 #include<cstring>
 3 #include<string>
 4 #include<algorithm>
 5 
 6 using namespace std;
 7 
 8 int t[15] = {0};
 9 
10 // 万能的搜索 
11 void DFS(int n)
12 {
13     if(n == 4) DFS(n+1);
14     if(n == 7){
15         for(int i=1;i<=14;i++)
16             cout<<t[i];
17         cout<<'\n';
18         return;
19     }
20     for(int i=1;i<=14;i++){ 
21         if(i == 1 || i == 2 || i == 9 || i == 7)
22             continue;    // 已经就位 
23         int loc = i+n+1;
24         if(loc > 14) continue;    // 边界 
25         if(t[i] == 0 && t[loc] == 0){
26             t[i] = t[loc] = n;
27             DFS(n+1);
28             t[i] = t[loc] = 0;    // 一定收回来 
29         }
30     }
31 }
32 
33 int main()
34 {
35     memset(t, 0, sizeof(t));
36     t[1] = 7;
37     t[2] = 4;
38     t[9] = t[1];
39     t[7] = t[2];
40     
41     DFS(1);
42     
43     return 0;
44 }
  1 #include<iostream>
  2 #include<string>
  3 #include<cstring>
  4 
  5 using namespace std;
  6 
  7 typedef long long ll;
  8 // MAX 有上限  85000
  9 const ll MAX = 1009;
 10 
 11 // 大数乘法 
 12 string BigMul(string x, string y)
 13 {    // 据说可以分治优化
 14     string ret;
 15     ll lenx = x.length();
 16     ll leny = y.length();
 17     // 被乘数、乘数、积 
 18     ll a[MAX], b[MAX], c[MAX];
 19     memset(a, 0, sizeof(a));
 20     memset(b, 0, sizeof(b));
 21     memset(c, 0, sizeof(c));
 22     for(ll i=lenx-1;i>=0;i--)
 23         a[lenx-i] = x[i] - '0';
 24     for(ll i=leny-1;i>=0;i--)
 25         b[leny-i] = y[i] - '0';
 26     // 第 i 位乘以 第 j 位为积的第 i+j-1 位(先不考虑进位) 
 27     for(ll i=1;i<=lenx;i++)
 28         for(ll j=1;j<=leny;j++)
 29             c[i+j-1] += a[i]*b[j];
 30     // 处理进位 
 31     for(ll i=1;i<=lenx+leny;i++)
 32         c[i+1] += c[i]/10, c[i] %= 10;
 33     // 判断第 i+j 位是否为 0  
 34     if(c[lenx+leny]) ret += c[lenx+leny] + '0';
 35     for(ll i=lenx+leny-1;i>=1;i--)
 36         ret += c[i] + '0';
 37     
 38     return ret;
 39 }
 40 
 41 // 大数比较大小 
 42 bool BigNumCmp(string a, string b)
 43 {
 44     if(a == b) return true;
 45     ll la = a.length();
 46     ll lb = b.length();
 47     if(la > lb) return true;
 48     if(la < lb) return false;
 49     for(ll i=0;i<la;i++){
 50         if(a.at(i) == b.at(i)) continue;
 51         if(a.at(i) < b.at(i)) return false;
 52         if(a.at(i) > b.at(i)) return true;
 53     }
 54 }
 55 
 56 // 大数开方 
 57 string BigSqrt(string x)
 58 {
 59     string ret;
 60     ll len = x.length();
 61     ll ls = 0, i = 0;
 62     if(len&1) ls = (len>>1) + 1;
 63     else ls = len>>1;
 64     for(ll i=0;i<ls;i++) ret += "0";
 65     if(BigMul(ret, ret) == x) return ret;
 66     while(ls--)
 67     {    
 68         for(int k=0;k<10;k++){
 69             if(BigMul(ret, ret) == x) return ret;
 70             if(!BigNumCmp(BigMul(ret, ret), x)){
 71                 ret.at(i)++;
 72                 if(ret.at(i) == ':'){
 73                     ret.at(i)--;break;
 74                 }
 75             }
 76             else{
 77                 ret.at(i)--;break;
 78             }
 79         }
 80         i++;
 81     }
 82     
 83     return ret;
 84 }
 85 
 86 int main()
 87 {
 88     string a, b;
 89     char A[2*MAX];
 90     // while(scanf("%s%s", &a[0], &b[0]))
 91     gets(A);
 92     {    
 93         int i=0;
 94         for(;i<strlen(A);i++){
 95             if(A[i] == ' '){
 96                 i++;break;
 97             }
 98             a.push_back(A[i]);
 99         }
100         for(;i<strlen(A);i++) b.push_back(A[i]);
101         // cout<<BigMul(a, b)<<'\n';
102         // cout<<BigNumCmp(a, b)<<'\n';
103         // cout<<BigSqrt(a)<<'\n';
104         // cout<<BigMul(BigSqrt(a), BigSqrt(b))<<'\n';
105         // puts(BigMul(BigSqrt(a), BigSqrt(b)).c_str());
106         cout<<BigMul(BigSqrt(a), BigSqrt(b))<<'\n';
107     }
108     
109     return 0;
110 }
 1 // 分糖果
 2 #include<iostream>
 3 #include<cstring>
 4 using namespace std;
 5 
 6 int n = 0;
 7 
 8 bool sure(int *a)
 9 {
10     for(int i=0;i<n-1;i++)
11         for(int j=i+1;j<n;j++){
12             if(a[i] != a[j])
13                 return false;
14         }
15     return true;
16  } 
17 
18 int fun(int *a)
19 {
20     int c = 0;
21     int b[101] = {0};
22     // int *b = new int(n);
23     memset(b, 0, sizeof(b));
24     while(1)
25     {
26         for(int i=0;i<n;i++){
27             b[i] = a[i] >>= 1;
28         }
29         for(int i=0;i<n-1;i++){
30             a[i] += b[i+1];
31         }
32         a[n-1] += b[0];
33         if(sure(a)) break;
34         for(int i=0;i<n;i++){
35             if(a[i]&1){
36                 a[i]++;c++;
37             }
38         }
39     }
40     // delete []b;
41     return c;
42 }
43 
44 int main()
45 {
46     while(cin>>n)
47     {
48         int a[101] = {0};
49         // int *a = new int(n);
50         memset(a, 0, sizeof(a));
51         for(int i=0;i<n;i++)
52             cin>>a[i];
53         cout<<fun(a)<<endl; 
54         
55         // delete []a;
56     } 
57 
58     return 0;
59 }

 

 1 // 谁能告诉我为什么我少了一种......
 2 #include<iostream>
 3 #include<cstring>
 4 #include<string>
 5 #include<algorithm>
 6 
 7 using namespace std;
 8 
 9 const int MAX = 0xffff;
10 
11 int a[9] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
12 
13 int main()
14 {
15     
16     int ans = 0;
17     while(next_permutation(a, a+9))
18     {
19         if(a[0] < a[2] && a[0] < a[3] && a[1] < a[3] && a[1] < a[4] && a[2] < a[5] && a[2] < a[6] && a[3] < a[7] && a[3] < a[6]    && a[4] < a[7] && a[4] < a[8])
20         {
21             ans++;
22             cout<<0<<'\n';
23             cout<<a[0]<<' '<<a[1]<<'\n';
24             cout<<a[2]<<' '<<a[3]<<' '<<a[4]<<'\n';
25             cout<<a[5]<<' '<<a[6]<<' '<<a[7]<<' '<<a[8]<<'\n';
26         }
27     }
28     
29     cout<<767<<'\n';
30     
31     return 0;
32 }

 

posted @ 2019-03-02 13:57  maybeTang  阅读(370)  评论(0编辑  收藏  举报