当前位置: 代码迷 >> 综合 >> ACM Plan UVa - 735 Dart-a-Mania
  详细解决方案

ACM Plan UVa - 735 Dart-a-Mania

热度:59   发布时间:2023-10-15 12:37:08.0

Talk is cheap. Show me the code. —— Linus Torvalds

Hits: 运用C++的next_permutation()函数解题

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <vector>
#include <set>
using namespace std;
const int MAX = 40000;
set<vector<int>> s;
int c[MAX], p[MAX];
int main()
{
    
// freopen("i.txt", "r", stdin);
// freopen("o.txt", "w", stdout);vector<int> v;v.push_back(0); v.push_back(50);for(int i = 1; i <= 20; i++)for(int j = 1; j <= 3; j++)v.push_back(i * j);sort(v.begin(), v.end());int limit = v.size();for(int i = 0; i < limit; i++)for(int j = 0; j < limit; j++)for(int k = 0; k < limit; k++){
    vector<int> v2 = {
    v[i], v[j], v[k]};int sum = v[i] + v[j] + v[k];if(s.count(v2) == 0){
    c[sum]++;int t = 0;do{
    t++;s.insert(v2);} while (next_permutation(v2.begin(), v2.end()));p[sum] += t;}}}}int num;while(scanf("%d", &num) && num > 0){
    if(c[num] == 0)printf("THE SCORE OF %d CANNOT BE MADE WITH THREE DARTS.\n", num);else{
    printf("NUMBER OF COMBINATIONS THAT SCORES %d IS %d.\n", num, c[num]);printf("NUMBER OF PERMUTATIONS THAT SCORES %d IS %d.\n", num, p[num]);}for(int i = 0; i < 70; i++) putchar('*');putchar('\n');}puts("END OF OUTPUT");return 0;
}