• 题解 UVa11076


    题目大意 多组数据,每组数据给出 (n) 个一位数,求出这些一位数组成的所有不同整数的和。

    分析 考虑一个数对某一位的贡献,为这个数乘以其他数的全排列数,问题转化为可重复元素的全排列。

    引理 (n) 个元素,可分为 (m) 组,其中本组元素全部相同,不同组元素不同,且第 (i) 组有 (p_i) 个,则总的排列数为

    [frac{n!}{prod_{k=1}^m p_k!} ]

    证明可从 (n) 个位置放物品的组合数导出,这里略去。

    则总的答案为各数位上的贡献之和。

    #include<bits/stdc++.h>
    using namespace std;
    
    typedef unsigned long long ull;
    
    int n;
    ull tmp, ans;
    ull base[13] = {0, 1, 11, 111, 1111, 11111, 111111, 1111111, 11111111, 111111111, 1111111111, 11111111111, 111111111111};
    map<ull, int> m;
    
    ull Read()
    {
    	ull x = 0;
    	char ch = getchar();
    	while(ch < '0' || ch > '9') ch = getchar();
    	while(ch >= '0' && ch <= '9') {
    		x = (x << 3) + (x << 1) + (ch - '0');
    		ch = getchar();
    	}
    	return x;
    }
    
    int main()
    {
    	while(~scanf("%d", &n) && n) {
    		ans = 0, tmp = 1, m.clear();
    		for(int i = 1; i <= n; ++i)
    			tmp = tmp * i / (++m[Read()]);
    		
    		map<ull, int>::iterator it = m.begin();
    		while(it != m.end())
    			ans += it->first * tmp * it->second / n, ++it;
    		
    		printf("%llu
    ", ans * base[n]);
    	}
    }
    
  • 相关阅读:
    Scrapy中的POST请求发送和递归爬取
    爬虫之Scrapy框架
    linux下的python3,virtualenv,Mysql,nginx,redis安装配置
    Linu之linux系统基础优化和基本命令
    Linux之linux基础命令2
    Linux之linux基础命令
    Linux之linux入门
    Linux之服务器介绍
    Django之content_type
    Vue.js之路由系统
  • 原文地址:https://www.cnblogs.com/whx1003/p/11963910.html
Copyright © 2020-2023  润新知