逆序数 | ||
Accepted : 10 | Submit : 27 | |
Time Limit : 1000 MS | Memory Limit : 65536 KB |
题目描述有n张卡片,分别标有数字1~n。有一天Silence把他们按某种序列排好,然后从第一张开始取出一张,再拿一张放到最后面,再取出一张,再拿出一张放到最后面...知道n张卡片全部取走。把取出的卡片按取出的顺序排好,正好是1,2,3,4,....,n。 输入输入不超过1000个样例,每个样例一行,一个整数n(1 <= n <= 10^9)。 输出每个样例输出一行,一个整数,为原来序列的逆序数 样例输入4 样例输出1 |
1 #include<iostream>
2 #include<stdio.h>
3 #include<cstring>
4 #include<cstdlib>
5 using namespace std;
6 typedef long long LL;
7
8 int main()
9 {
10 LL n;
11 while(scanf("%I64d",&n)>0)
12 {
13 LL sum=0;
14 while(n)
15 {
16 if((n&1)==1) n++;
17 if(n==2) break;
18 n=n/2;
19 sum=sum+n*(n-1)/2;
20 }
21 printf("%I64d\n",sum);
22 }
23 return 0;
24 }
湘潭月赛 逆序数
时间: 2024-10-06 00:29:33