Skip to main content
  1. Posts/

poj 1256 Anagram

·1 min
Note: This article is available in Chinese only. 本文暂无英文版本。 View original

http://poj.org/problem?id=1256

题意是说求出一个字符串的全排列,按字典序

需要注意的是字典序和传统意义上的字典序不同

重新定义了,A

需要自己重写cmp函数。

next_permutation好神….直接求出全排列…..

 1
 2
 3    /* ***********************************************
 4    Author :111qqz
 5    Created Time :2016年02月19日 星期五 15时43分31秒
 6    File Name :code/poj/1256.cpp
 7    ************************************************ */
 8
 9    #include <algorithm>
10    #include <cstdio>
11    #include <iostream>
12    #include <cstring>
13    #include <string>
14    #include <cmath>
15    #include <map>
16
17    using namespace std;
18    bool cmp(char a,char b)
19    {
20        char x = tolower(a);
21        char y = tolower(b);
22        if (x==y)
23        {
24            return a<b;
25        }
26        else return x<y;
27    }
28    int n;
29    string st;
30
31    int main()
32    {
33        cin>>n;
34        while (n--)
35        {
36
37            cin>>st;
38            sort(st.begin(),st.end(),cmp);
39            do
40            {
41                cout<<st<<endl;
42            }while (next_permutation(st.begin(),st.end(),cmp));
43        }
44
45
46    	return 0;
47    }

Related

codeforces 548B Mike and Fun

·1 min
http://codeforces.com/problemset/problem/548/B 比赛的时候不懂为什么就没做出来…. 其实很容易想到一个o(q*(n+m))的做法… 就是每次更新,要同时更新当前更新行的最大连续和….O(m)可以完成…然后在O(n)扫一遍,找到所有行中的最大值。 然后需要注意的是,在第一次更改之前就要把每个行的最大值处理出来l.. 然后cf机器真是够快,O(nmq)的1.2S过。。。。

poj 2492 A Bug's Life (并查集)

·1 min
http://poj.org/problem?id=2492 Hint Huge input,scanf is recommended. 也是带种类的冰茶几。 由于只分了两类…我们还是可以按照上道题的做法。。

poj 1703 Find them, Catch them (并查集)

·2 mins
http://poj.org/problem?id=1703 种类冰茶几…看到还有一种算是拓展的交加权冰茶几? 看到有做法是在开一个数组。。。记录是哪一组…. 但是因为只有两组….我们可以分别存… 因为不知道每一个D的两个人分别是哪个组(帮派?) 可以都存一下。 TLE了两次….应该是用了cin的事。。。改成scanf就变WA了。。。 想了下。原来是我对“not sure yet”的判断出现失误。 我开了一个v数组,记录在D下出现的人。 我误以为出现的人的帮派一定是确定的。 实际上并不是。 比如 1,3 5,7 3和7都出现了。但是3和7是一组与否显然还是“not sure yet”

codeforces 535 C.Tavas and karafs (解方程)

·2 mins
http://codeforces.com/problemset/problem/535/C 题读了好几遍才读懂。 题意是给出一个等差数列,操作严格要求从最左边不为零的连续m个数减去1,最多执行t次后问离最左边最远的位置在哪里。 有两个限制条件…一个是本身的si不能大于t,否则无法吃完。 还有一个是从sl到sr的和不能超过m*t (比赛的时候考虑的不周到。。实际上只有当r-l+1比m大的时候才是m,也就是说要取min(m,l-r+1)) 这题正解应该是二分….直接Lower_bound。。。看到也有人用前缀和搞的。 我是解方程了(貌似是个傻逼做法)…. 可以列出一个关于r的一元二次方程。。。然后求根公式2333 方程是: