分类目录归档:枚举

[USACO1.2]命名那个数字 Name That Number

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include<bits/stdc++.h>
using namespace std;
vector<string> Dict; //用Dict存放所有字典中的名字
string str; //给定的编号
const char * str_trans = "2223334445556667 77888999"; //使用该C-风格字符串来存放A-Z(除去Q和Z这24个字母所对应的数字)
int main(){
    ios::sync_with_stdio(false); //只用cin/cout加快IO速度
    cin >> str;
    string tmp;
    while (cin >> tmp){ //将后面所有的字符串循环读入到tmp中,再放到Vector尾,(cin>>tmp)即可以起到读入字符串的作用,也可以起到判断文件是否到达末尾。详情请阅读C++ Primer Plus。
        Dict.push_back(tmp);
    }
    int len = str.length();
    bool global_flag = false;
    for (int i = 0; i < Dict.size(); i++){ //遍历所有字典元素,因为字典元素少
        if (len != Dict[i].length())continue; //剪枝,如果字符串位数不一样就没有必要比较。
        bool flag = true;
        for (int j = 0; j < len; j++){
            if (str_trans[Dict[i][j] - 'A'] != str[j]){ //比对字典中每个字符对应的数字是否与输入的每个数字相同
                flag = false; //不相同直接跳出循环
                break;
            }
        }
        if (flag){ //相同则输出该单词
            cout << Dict[i] << endl;
            global_flag = true;
        }
    }
    if (!global_flag){ //如果没有一个单词符合要求,就输出NONE。
        cout << "NONE" << endl;
    }
}

洛谷/USACO 丑数 Humble Numbers

洛谷题号:P2723
参考题解:作者: redbag 管理员 更新时间: 2016-08-01 23:15 https://www.luogu.org/wiki/show?name=%E9%A2%98%E8%A7%A3+P2723
这个暴力还是有一定思想的,一般人根本想不到的…………

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include<iostream>
#include<algorithm>
#include<cstring>
#include<vector>
#include<string>
#include<cassert>
#include<map>
#include<queue>
using namespace std;
int k, n;
long long a[105], s[200000], f[200000];
int main(){
    ios::sync_with_stdio(false);
    cin >> k >> n;
    for (int i = 1; i <= k; i++){
        cin >> a[i];
    }
    f[0] = 1;
    for (int i = 1; i <= n; i++){
        long long m = 2e10;
        for (int j = 1; j <= k; j++){
            while (a[j] * f[s[j]] <= f[i - 1])s[j]++;
            m = min(a[j] * f[s[j]], m);
        }
        f[i] = m;
    }
    cout << f[n] << endl;
}

洛谷/USACO 联系 Contact

洛谷题号:P2724

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#include<iostream>
#include<algorithm>
#include<cstring>
#include<vector>
#include<string>
#include<cassert>
#include<map>
using namespace std;
map<string, int> m;
string s,st;
int a, b, n;
struct sorted{
    int times;
    string str;
    bool operator < (sorted & s2){
        if (times != s2.times)return times>s2.times;
        else if (str.length() != s2.str.length())return str.length() < s2.str.length();
        else{
            for (int i = 0; i < str.length(); i++){
                if (str[i] != s2.str[i]){
                    return str[i] < s2.str[i];
                }
            }
            return true;
        }
    }
}sarr[200000];
int sarr_iter = 0;
int main(){
    ios::sync_with_stdio(false);
    cin >> a >> b >> n;
    while (cin >> st)s.append(st);
    for (int len = a; len <= b; len++){
        if (len > s.length())break;
        for (int i = 0; i <= s.length() - len; i++){
            m[s.substr(i, len)]++;
        }
    }
    for (auto i = m.begin(); i != m.end(); i++){
        sarr[++sarr_iter].times = (*i).second;
        sarr[sarr_iter].str = (*i).first;
    }
    sort(sarr + 1, sarr + sarr_iter + 1);
    int cur_freq_num = 0;
    int cur_freq_value = -1, cur_value_times = 0;
    for (int i = 1; cur_freq_num<=n&&i<=sarr_iter; i++){
        if (sarr[i].times != cur_freq_value){
            cur_freq_num++;
            if (cur_freq_num > n)break;
            if (cur_value_times % 6 != 0)cout << endl;
            cur_freq_value = sarr[i].times;
            cur_value_times = 1;
            cout << cur_freq_value << endl << sarr[i].str;
        }
        else{
            if (cur_value_times % 6 != 0)cout << " ";
            cout << sarr[i].str;
            cur_value_times++;
            if (cur_value_times % 6 == 0)cout << endl;
        }
    }
    if (cur_value_times % 6 != 0)cout << endl;
}

Openjudge 画家问题

画家问题

总时间限制:
1000ms
内存限制:
65536kB
描述
有一个正方形的墙,由N*N个正方形的砖组成,其中一些砖是白色的,另外一些砖是黄色的。Bob是个画家,想把全部的砖都涂成黄色。但他的画笔不好使。当他用画笔涂画第(i, j)个位置的砖时, 位置(i-1, j)、 (i+1, j)、 (i, j-1)、 (i, j+1)上的砖都会改变颜色。请你帮助Bob计算出最少需要涂画多少块砖,才能使所有砖的颜色都变成黄色。

输入
第一行是一个整数n (1≤n ≤15),表示墙的大小。接下来的n行表示墙的初始状态。每一行包含n个字符。第i行的第j个字符表示位于位置(i,j)上的砖的颜色。“w”表示白砖,“y”表示黄砖。
输出
一行,如果Bob能够将所有的砖都涂成黄色,则输出最少需要涂画的砖数,否则输出“inf”。
样例输入
5
wwwww
wwwww
wwwww
wwwww
wwwww
样例输出
15
来源
1681

继续阅读