poj 2211 Photograph

来源:互联网 发布:怎么报复淘宝差评 编辑:程序博客网 时间:2024/05/19 02:39

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

数学水(找规律)

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

题目分析:

Hint(case 4):123//最后一位是5-2出来的124//倒数第二位是5-1125132134135142143145152153154//一打头的有12个2打头的又12个3打头的又12个4打头的又12个512513514521523524531那么这个例子就是这样:第一位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:貌似分析不够透彻……没有完全理解分析过程







原创粉丝点击