B题
/*
作者:Michaelia
题目:hdu5686
给定一个全1序列的长度,可合并任意相邻的两个1从而形成一个新的序列,求所能形成的新序列的数量。
*/
import java.util.Scanner;
import java.math.*;
public class Main {
static BigInteger[] fib = new BigInteger[201];
public static void fibo()
{
int a = 2;
int b = 1;
fib[1] = BigInteger.valueOf(b);
fib[2] = BigInteger.valueOf(a);
for (int i = 3; i < 201; i ++)
{
fib[i] = fib[i-1].add(fib[i-2]);
}
}
public static void main(String[] args)
{
fibo();
Scanner cin = new Scanner (System.in);
while(cin.hasNext())
{
int n = cin.nextInt();
System.out.println(fib[n]);
}
}
}:
/*思路
由于合并后的序列只有0和1两种数字因此可认为与固定的位置无关,保留末尾的1:f[i-1] 合并末两位为2:f[i-2]
另:斐波那契数列的变化特点
a:=a+b
b:=a
参见:http://qfviolethill.blog.163.com/blog/static/114112168200911131352305/
*/
D题
/*
作者:Michaelia
题目:hdu5688
一个字符串的字符全排列均认为是同一字符串,求每一个字符串在之前被统计过多少次。
*/
#include <cstdio>
#include <iostream>
#include <string>
#include <cstring>
#include <map>
#include <algorithm>
using namespace std;
map<string,int>m;
int main()
{
int N;
scanf("%d",&N);
m.clear();
while(N--)
{
char ch[41];
scanf("%s",ch);
sort(ch,ch+strlen(ch));
string s =ch;
m[s]++;
printf("%d
",m[s]-1);
}
}
/*思路:
利用map实现每个字符串与其对应次数的映射,注意map使用前要清空
*/