Bzoj3301: [usaco2011 Feb] cow line

Source: Internet
Author: User
3301: [usaco 128 Feb] cow linetime limit: 10 sec memory limit: MB
Submit: 67 solved: 39
[Submit] [Status] Description

The N (1 <= n <= 20) cows conveniently numbered 1... n are playing
Yet another one of their crazy games with Farmer John. The cows
Will arrange themselves in a line and ask Farmer John what their
Line number is. In return, Farmer John can give them a line number
And the cows must rearrange themselves into that line.
A line number is assigned by numbering all the permutations of
Line in Lexicographic Order.

Consider this example:
Farmer John has 5 cows and gives them the line number of 3.
The permutations of the line in ascending Lexicographic Order:
1st: 1 2 3 4 5
2nd: 1 2 3 5 4
3rd: 1 2 4 3 5
Therefore, the cows will line themselves in the cow line 1 2 4 3 5.

The cows, in return, line themselves in the configuration "1 2 5 3 4" and
Ask Farmer John what their line number is.

Continuing with the list:
4th: 1 2 4 5 3
5th: 1 2 5 3 4
Farmer John can see the answer here is 5

Farmer John and the cows wocould like your help to play their game.
They have K (1 <= k <= 10,000) queries that they need help.
Query I has two parts: C_ I will be the command, which is either 'P'
Or 'q '.

If C_ I is 'P', then the second part of the query will be one integer
A_ I (1 <= a_ I <= n !), Which is a line number. This is Farmer John
Challenging the cows to line up in the correct cow line.

If C_ I is 'Q', then the second part of the query will be n distinct
Integers B _ij (1 <= B _ij <= N). This will denote a cow line. These are
Cows challenging Farmer John to find their line number.

There are nheaded cows, respectively, with 1 ...... N indicates a line.
Sort all possible nheaded cattle in alphabetical order from small to large.
For example, five cows
1st: 1 2 3 4 5
2nd: 1 2 3 5 4
3rd: 1 2 4 3 5
4th: 1 2 4 5 3
5th: 1 2 5 3 4
......
Now we know how nheader cattle are arranged, and find the row number of this sort.
Or if the row number is known, find the order of cattle.
The row number refers to the number of the row in which a specific arrangement is located after the nheaded ox is arranged in alphabetical order from large to small.
If the row number is 3, the order is 1 2 4 3 5.
If the permutation is 1 2 5 3 4, the row number is 5.

There are k q & A requests. The type of the I-th Q & A is specified by C_ I. C_ I is either 'P' or 'q '.
When C_ I is P, the row number is provided for you to answer the question. When C_ I is Q, it will tell you how the ox is arranged and ask you to answer the row number.

Input

* Line 1: two space-separated integers: N and K
* Lines 2 .. 2 * k + 1: Line 2 * I and 2 * I + 1 will contain a single query.
Line 2 * I will contain just one character: 'q' if the cows are lining
Up and asking Farmer John for their line number or 'P' if farmer
John gives the cows a line number.

If the line 2 * I is 'Q', then line 2 * I + 1 will contain N space-separated
Integers B _ij which represent the cow line. If the line 2 * I is 'P ',
Then line 2 * I + 1 will contain a single integer a_ I which is the line
Number to solve.

Row 3: N and K
2nd to 2 * k + 1 line: line2 * I, a character 'P' or 'q', indicating the type.
If line2 * I is P, line2 * I + 1 is an integer representing the row number;
If line2 * I + 1 is Q, line2 + I is an integer separated by N spaces, indicating the order of cattle.

 

Output

* Lines 1. K: line I will contain the answer to query I.

If line 2 * I of the input was 'Q', then this line will contain
Single integer, which is the line number of the cow line in line
2 * I + 1.

If line 2 * I of the input was 'P', then this line will contain N
Space separated integers giving the cow line of the number in line
2 * I + 1.
Rows 1st to K: If the input line2 * I is P, the sorting mode of the output cow is. If the input line2 * I is Q, the row number is output.

Sample input5 2
P
3
Q
1 2 5 3 4

Sample output
1 2 4 3 5
5
Hint Source

Silver

Question: I am still too Sb... Expand the naked Kang Tuo and reverse Kang Tuo. Long long has been running wa for two hours... Code:
 1 #include<cstdio> 2 #include<cstdlib> 3 #include<cmath> 4 #include<cstring> 5 #include<algorithm> 6 #include<iostream> 7 #include<vector> 8 #include<map> 9 #include<set>10 #include<queue>11 #include<string>12 #define inf 100000000013 #define maxn 500+10014 #define maxm 500+10015 #define eps 1e-1016 #define ll long long17 #define pa pair<int,int>18 #define for0(i,n) for(int i=0;i<=(n);i++)19 #define for1(i,n) for(int i=1;i<=(n);i++)20 #define for2(i,x,y) for(int i=(x);i<=(y);i++)21 #define for3(i,x,y) for(int i=(x);i>=(y);i--)22 #define mod 100000000723 using namespace std;24 inline ll read()25 {26     ll x=0,f=1;char ch=getchar();27     while(ch<‘0‘||ch>‘9‘){if(ch==‘-‘)f=-1;ch=getchar();}28     while(ch>=‘0‘&&ch<=‘9‘){x=10*x+ch-‘0‘;ch=getchar();}29     return x*f;30 }31 ll n,m,a[25],b[25],fac[25];32 int main()33 {34     freopen("input.txt","r",stdin);35     freopen("output.txt","w",stdout);36     n=read();m=read();37     fac[0]=1;38     for(ll i=1;i<n;i++)fac[i]=fac[i-1]*i;39     char ch;40     while(m--)41     {42         ch=‘ ‘;43         while(ch!=‘P‘&&ch!=‘Q‘)ch=getchar();44         for1(i,n)a[i]=0;45         if(ch==‘P‘)46         {47             ll x=read()-1;48             for1(i,n)49             {50                 ll t=x/fac[n-i]+1,j=0,k;51                 for(k=1;j<t;k++)if(!a[k])j++;52                 a[k-1]=1;b[i]=k-1;53                 x%=fac[n-i];54             }55             for1(i,n-1)printf("%d ",b[i]);printf("%d\n",b[n]); 56         }57         else58         {59             for1(i,n)b[i]=read();60             ll x=1;61             for1(i,n)62             {63                 ll j=0,k;64                 for(k=1;k<b[i];k++)if(!a[k])j++;65                 a[k]=1;66                 x+=j*fac[n-i];67             }68             printf("%lld\n",x);69         }70     }71     return 0;72 }
View code

 

Bzoj3301: [usaco2011 Feb] cow line

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.