• 编程之美资格题目2 : 大神与三位小伙伴


    时间限制:2000ms
    单点时限:1000ms
    内存限制:256MB

    描述

    L国是一个有着优美景色且物产丰富的国家,很多人都喜欢来这里旅游并且喜欢带走一些纪念品,大神同学也不例外。距离开L国的时间越来越近了,大神同学正在烦恼给她可爱的小伙伴们带什么纪念品好,现在摆在大神同学面前的有三类纪念品A, B, C可以选择,每类纪念品各有N种。其中种类为A_i, B_i, C_i的纪念品价值均为i, 且分别有N+1-i个剩余。现在大神同学希望在三类纪念品中各挑选一件然后赠送给她的三名可爱的小伙伴,但是她又不希望恰好挑出来两件价值相同的纪念品,因为这样拿到相同价值纪念品的两位小伙伴就会认为大神同学偏袒另一位小伙伴而不理睬她超过一星期。现在,大神同学希望你买到的三件纪念品能让三位小伙伴都开心并且不和她闹别扭,她想知道一共有多少种不同挑选的方法?

    因为方案数可能非常大,大神同学希望知道挑选纪念品的方案数模10^9+7之后的答案。


    输入

    第一行包括一个数T,表示数据的组数。

    接下来包含T组数据,每组数据一行,包括一个整数N。


    输出

    对于每组数据,输出一行“Case x: ”,其中x表示每组数据的编号(从1开始),后接一个数,表示模10^9+7后的选择纪念品的方案数。


    数据范围

    小数据:

    1<=T<=10

    1<=N<=100

    大数据:

    1<=T<=1000

    1<=N<=10^18


    样例解释

    对于第二组数据,合法的方案有以下几种,(X,Y,Z)表示选择了A类纪念品中价值为X的,B类纪念品中价值为Y的,C类纪念品中价值为Z的。

    (1,1,1): 3*3*3=27种

    (1,2,3): 3*2*1=6种

    (1,3,2): 3*1*2=6种

    (2,1,3): 2*3*1=6种

    (2,2,2): 2*2*2=8种

    (2,3,1): 2*1*3=6种

    (3,1,2): 1*3*2=6种

    (3,2,1): 1*2*3=6种

    (3,3,3): 1*1*1=1种

    一共27+6+6+6+8+6+6+6+1=72种选择纪念品的方案

    注意,如(1,1,2), (2,3,3), (3,1,3)都因为恰好选择了两件价值相同的纪念品,所以并不是一种符合要求的纪念品选择方法。




    样例输入
    2
    1
    3
    
    样例输出
    Case 1: 1
    Case 2: 72
    
    代码如下:
    //source here
    #include <iostream>
    using namespace std;
    #define M 1000000007
    typedef unsigned long long mylong64;
    mylong64 computcount(mylong64 N)
    {
    	bool flag[101][101][101]={0};
    	mylong64 count1=0;
    	for (mylong64 x=1;x<=N;++x)
    	{
    		for (mylong64 y=1;y<=N;++y)
    		{
    			for (mylong64 z=1;z<=N;++z)
    			{
    
    				if (x==y||y==z||x==z)
    				{
    					if (x==y&&y==z)
    					{
    						if (!flag[x][y][z])
    						{
    							count1+=((N+1-x)*(N+1-y)*(N+1-z)%M);
    							flag[x][y][z]=1;
    							if (count1>M)
    							{
    								count1=count1%M;
    							}
    						}
    					}
    				}
    				else
    				{
    					if (!flag[x][y][z])
    					{
    						count1+=((N+1-x)*(N+1-y)*(N+1-z)%M)*6;
    						flag[x][y][z]=flag[x][z][y]=flag[y][x][z]=flag[y][z][x]=flag[z][x][y]=flag[z][y][x]=1;
    						if (count1>M)
    						{
    							count1=count1%M;
    						}
    					}
    				}
    			}
    		}
    	}
    	return count1;
    }
    
    int main()
    {
    	int n;
    	cin>>n;
    	mylong64 *p=new mylong64[n];
    	for (int i=0;i<n;i++)
    	{
    		cin>>p[i];
    	}
    
    	for (int i=0;i<n;i++)
    	{
    		p[i]=computcount(p[i]);
    		cout<<"Case "<<i+1<<": "<<p[i]<<endl;
    	}
    	return 0;
    }

  • 相关阅读:
    PostgreSQL 9.6.2版本在centOS下的安装和配置
    postgreSQL 创建user表时引发的表名大写与双引号问题
    Go JSON嵌套解析失败
    面试杂谈:面试程序员时都应该考察些什么?<转>
    Golang bash脚本自动创建一个go工程
    iOS Debug心得 (持续更新)
    iOS 上传APP到AppStore 卡在 Authenticating with the iTunes store 提示
    iOS 应用打包 设备兼容性问题(Build Active Architecture Only)
    Go 使用自定义包(package)
    Go 连接PostgreSQL数据库
  • 原文地址:https://www.cnblogs.com/chhuach2005/p/3961701.html
Copyright © 2020-2023  润新知