poj 2211 Photograph

poj   2211   Photograph               题目链接:http://poj.org/problem?id=2211

数学水(找规律)

题目大意:给议会议员照相,议会人太多,照片不够大,只照的进一部分人,给出一个排列,问这是第几种排列。议会共有n个人(编号1~n),照片装得下k个人,(n、k键盘输入)。排列按编号的字典序。

题目分析:

Hint(case 4):
123//最后一位是5-2出来的
124//倒数第二位是5-1
125
132
134
135
142
143
145
152
153
154//一打头的有12个
2打头的又12个
3打头的又12个
4打头的又12个
512
513
514
521
523
524
531
那么这个例子就是这样:第一位5取5-1=4,4×A42=48,第二位3取3-1=2,2×A31=6,第三位1直接加上即可。
code:
#include<stdio.h>
int main()
{//n:总共有多少人k:一张照片里有多少人a[20]:存给出照片状态 
	int t,i,i2,j,n,k,a[20],ans,sum;//ans:最终结果sum:中间结果 
	scanf("%d",&t);//t:testcase、i,i2,j:计数器 
	for(j=1;j<=t;j++)
	{
		ans=0;
		scanf("%d%d",&n,&k);
		for(i=0;i<k;i++)
			scanf("%d",a+i);
		for(i=0;i<k;i++)
		{
			sum=*(a+i)-1;
			for(i2=n-i-1;i2>=n-k+1;i2--)//
				sum*=i2;
			ans+=sum;
			for(i2=i+1;i2<k;i2++)
			{
				if(a[i2]>a[i])a[i2]--;
			}
		}
		printf("Variace cislo %d ma poradove cislo %d.\n",j,ans+1);
	}
	return 0;
}
PS:貌似分析不够透彻……没有完全理解分析过程







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值