此题很水,暴力搜索,然后根据条件判断,continue掉一些循环就可以了,简称,剪枝,一次过!
下面上代码:
/* ID: bbsunch2 PROG: crypt1 LANG: C++ */ #include <iostream> #include <fstream> #include <stdlib.h> #include <vector> using namespace std; int main() { ofstream fout ("crypt1.out"); ifstream fin ("crypt1.in"); int digitNum; vector<int> digits; fin >> digitNum; for(int i = 0; i < digitNum; i++) { int d = 0; fin >> d; digits.push_back(d); } int a1 = 0; int a2 = 0; int a3 = 0; int b1 = 0; int b2 = 0; int c1 = 0; int c2 = 0; int c3 = 0; int d1 = 0; int d2 = 0; int d3 = 0; int e1 = 0; int e2 = 0; int e3 = 0; int e4 = 0; int A = 0; int B = 0; int C = 0; int D = 0; int E = 0; int caseNum = 0; for(int a1i = 0; a1i < digits.size(); a1i++) { a1 = digits[a1i]; for(int a2i = 0; a2i < digits.size(); a2i++) { a2 = digits[a2i]; for(int a3i = 0; a3i < digits.size(); a3i++) { a3 = digits[a3i]; A = a1*100 + a2*10 + a3; for(int b2i = 0; b2i < digits.size(); b2i++) { b2 = digits[b2i]; C = b2 * A; if(C < 100 || C > 999) { continue; } c1 = (int)(C / 100); c2 = (int)((C % 100)/10); c3 = C % 10; bool containC1 = false; bool containC2 = false; bool containC3 = false; for(int i = 0; i < digits.size(); i++) { if(c1 == digits[i]) { containC1 = true; } if(c2 == digits[i]) { containC2 = true; } if(c3 == digits[i]) { containC3 = true; } } if(!(containC1 && containC2 && containC3)) { continue; } for(int b1i = 0; b1i < digits.size(); b1i++) { b1 = digits[b1i]; D = b1 * A; if(D < 100 || D > 999) { continue; } d1 = (int)(D / 100); d2 = (int)((D % 100)/10); d3 = D % 10; bool containD1 = false; bool containD2 = false; bool containD3 = false; for(int i = 0; i < digits.size(); i++) { if(d1 == digits[i]) { containD1 = true; } if(d2 == digits[i]) { containD2 = true; } if(d3 == digits[i]) { containD3 = true; } } if(!(containD1 && containD2 && containD3)) { continue; } B = b1 * 10 + b2; E = A * B; if(E < 1000 || E > 9999) { continue; } e1 = (int)(E / 1000); e2 = (int)(E / 100) - e1 * 10; e3 = (int)((E % 100) / 10); e4 = (int)E%10; bool containE1 = false; bool containE2 = false; bool containE3 = false; bool containE4 = false; for(int i = 0; i < digits.size(); i++) { if(e1 == digits[i]) { containE1 = true; } if(e2 == digits[i]) { containE2 = true; } if(e3 == digits[i]) { containE3 = true; } if(e4 == digits[i]) { containE4 = true; } } if(containE1 && containE2 && containE3 && containE4) { caseNum ++; }else { continue; } } } } } } fout << caseNum << endl; return 0; }
运行结果 :
USACO 写道
USER: Chen Sun [bbsunch2]
TASK: crypt1
LANG: C++
Compiling...
Compile: OK
Executing...
Test 1: TEST OK [0.000 secs, 3356 KB]
Test 2: TEST OK [0.000 secs, 3356 KB]
Test 3: TEST OK [0.000 secs, 3356 KB]
Test 4: TEST OK [0.000 secs, 3356 KB]
Test 5: TEST OK [0.000 secs, 3356 KB]
Test 6: TEST OK [0.000 secs, 3356 KB]
Test 7: TEST OK [0.000 secs, 3356 KB]
All tests OK.
YOUR PROGRAM ('crypt1') WORKED FIRST TIME! That's fantastic
-- and a rare thing. Please accept these special automated
congratulations.
Here are the test data inputs:
------- test 1 ----
5
2 3 4 6 8
------- test 2 ----
4
2 3 5 7
------- test 3 ----
1
1
------- test 4 ----
7
4 1 2 5 6 7 3
------- test 5 ----
8
9 1 7 3 5 4 6 8
------- test 6 ----
6
1 2 3 5 7 9
------- test 7 ----
9
1 2 3 4 5 6 7 8 9
Keep up the good work!
Thanks for your submission!
TASK: crypt1
LANG: C++
Compiling...
Compile: OK
Executing...
Test 1: TEST OK [0.000 secs, 3356 KB]
Test 2: TEST OK [0.000 secs, 3356 KB]
Test 3: TEST OK [0.000 secs, 3356 KB]
Test 4: TEST OK [0.000 secs, 3356 KB]
Test 5: TEST OK [0.000 secs, 3356 KB]
Test 6: TEST OK [0.000 secs, 3356 KB]
Test 7: TEST OK [0.000 secs, 3356 KB]
All tests OK.
YOUR PROGRAM ('crypt1') WORKED FIRST TIME! That's fantastic
-- and a rare thing. Please accept these special automated
congratulations.
Here are the test data inputs:
------- test 1 ----
5
2 3 4 6 8
------- test 2 ----
4
2 3 5 7
------- test 3 ----
1
1
------- test 4 ----
7
4 1 2 5 6 7 3
------- test 5 ----
8
9 1 7 3 5 4 6 8
------- test 6 ----
6
1 2 3 5 7 9
------- test 7 ----
9
1 2 3 4 5 6 7 8 9
Keep up the good work!
Thanks for your submission!
相关推荐
USACO所有题目的题解 NOCOW整理版
Usaco总结&题解 一位大牛写的Usaco的总结,并有所有题的题解,推荐!!
USACO月赛题解1
USACO题解+代码+翻译,好东西,超级齐全,对大家帮助不小,特别是现在nocow挂了
USACO教程,包含USACO全部英文原题,题解(NOCOW整理版),翻译,教程,代码,测试数据。
丰富的USACO1.1--2.3.4的所有题解
非常详细的题解,个人觉得很好,帮助非常大。nocow关闭后不太好找资源了。
非常详细的题解,比较全的,个人觉得刷题者可以入手,帮助非常大。
非常详细的题解,比较全的,个人觉得刷题者可以入手,帮助非常大。
非常详细的题解,个人觉得比较全的,刷题者可以入手,帮助会非常大。
我的USACO题解和程序
USACO题解(NOCOW整理版).doc
usaco全部题解。 网址:blog.csdn.net/jiangshibiao
USACO题解及中文译题1.1.1-2.4.5 题目为TXT格式文档,代码为C++语言所编写
ACM----USACO Training(解题博客网),提供了USACO Training解题的代码,可以参考一下
里面有usaco前几节的程序和代码,欢迎使用,希望对你有所帮主。
usaco的某道题的题解
USACO(即美国高中生的编程竞赛网站)中的 pprime 题的题解
数据结构机考所参考的USACO网站所有题目的解题思路,资源比较稀有!