杭电ACM省赛集训队选拔赛之热身赛
思路:
多画几组数据 可以看出其实这个题目就是问你 把一个本来顺时针的环 变成逆时针的环所需要的次数
如果是偶数额们可以把一半拿出来转至 假如1 2 3 4 5 6 7 8
只要把1 2 3 4 变为 4 3 2 1 用的次数*2 就是最终结果了
变的过程就是求逆序数喽
如果是奇数 假如 1 2 3 4 5 6 7
就分为将 1 2 3 4 和 5 6 7 分别倒置所需要的次数
将求得的逆序数相加即可
#include<stdio.h> int a[40000]; void get() { int i,cnt=0; a[0]=a[1]=0; for(i=2;i<=20000;i++) { ++cnt; a[i]=a[i-1]+cnt; } } int main() { int n; get(); while(scanf("%d",&n)!=EOF) { if(n%2==0) { printf("%d\n",2*a[n/2]); } else printf("%d\n",a[n/2]+a[n/2+1]); } return 0; }