noip2013火柴排队
2016-10-04 10:37
162 查看
火柴排队
(match.cpp/c/pas)
【问题描述】
涵涵有两盒火柴,每盒装有n根火柴,每根火柴都有一个高度。现在将每盒中的火柴各
自排成一列,同一列火柴的高度互不相同,两列火柴之间的距离定义为:∑ (�� − ��)2 n
i=1 ,其
中ai表示第一列火柴中第i个火柴的高度,bi表示第二列火柴中第 i个火柴的高度。
每列火柴中相邻两根火柴的位置都可以交换,请你通过交换使得两列火柴之间的距离最
小。请问得到这个最小的距离,最少需要交换多少次?如果这个数字太大,请输出这个最
小交换次数对99,999,997取模的结果。
【输入】
输入文件为match.in。
共三行,第一行包含一个整数 n,表示每盒中火柴的数目。
第二行有n个整数,每两个整数之间用一个空格隔开,表示第一列火柴的高度。
第三行有n个整数,每两个整数之间用一个空格隔开,表示第二列火柴的高度。
【输出】
输出文件为match.out。
输出共一行,包含一个整数,表示最少交换次数对99,999,997取模的结果。
match.in
4
2 3 1 4
3 2 1 4
match.out
1
【输入输出样例说明】
最小距离是0,最少需要交换 1次,比如:交换第1 列的前2根火柴或者交换第 2列的
前2根火柴。
(match.cpp/c/pas)
【问题描述】
涵涵有两盒火柴,每盒装有n根火柴,每根火柴都有一个高度。现在将每盒中的火柴各
自排成一列,同一列火柴的高度互不相同,两列火柴之间的距离定义为:∑ (�� − ��)2 n
i=1 ,其
中ai表示第一列火柴中第i个火柴的高度,bi表示第二列火柴中第 i个火柴的高度。
每列火柴中相邻两根火柴的位置都可以交换,请你通过交换使得两列火柴之间的距离最
小。请问得到这个最小的距离,最少需要交换多少次?如果这个数字太大,请输出这个最
小交换次数对99,999,997取模的结果。
【输入】
输入文件为match.in。
共三行,第一行包含一个整数 n,表示每盒中火柴的数目。
第二行有n个整数,每两个整数之间用一个空格隔开,表示第一列火柴的高度。
第三行有n个整数,每两个整数之间用一个空格隔开,表示第二列火柴的高度。
【输出】
输出文件为match.out。
输出共一行,包含一个整数,表示最少交换次数对99,999,997取模的结果。
match.in
4
2 3 1 4
3 2 1 4
match.out
1
【输入输出样例说明】
最小距离是0,最少需要交换 1次,比如:交换第1 列的前2根火柴或者交换第 2列的
前2根火柴。
#include<cstdio> #include<algorithm> #include<cstring> using namespace std; const int maxn=100005,mod=99999997; int n; struct data{ int num,v; }a[maxn],b[maxn]; bool comp(data x,data y){ return x.v<y.v; } int bit[2*maxn]; void add(int k,int x){ while(k<=n){ bit[k]+=x; k+=k&-k; } } int sum(int k){ int ans=0; while(k>0){ ans+=bit[k]; k-=k&-k; } return ans; } int rank[maxn]; int main(){ freopen("match.in","r",stdin); freopen("match.out","w",stdout); scanf("%d",&n); for(int i=1;i<=n;i++){ int x; scanf("%d",&x); a[i].v=x;a[i].num=i; } for(int i=1;i<=n;i++){ int x; scanf("%d",&x); b[i].v=x;b[i].num=i; } memset(bit,0,sizeof(bit)); sort(a+1,a+1+n,comp); sort(b+1,b+1+n,comp); for(int i=1;i<=n;i++){ rank[a[i].num]=b[i].num; } int ans=0; for(int i=1;i<=n;i++){ add(rank[i],1); ans=(ans+i-sum(rank[i]))%mod; } printf("%d",ans); return 0; }
相关文章推荐
- 【NOIP2013】火柴排队
- 【NOIP2013】火柴排队 线段树+逆序对
- NOIP2013火柴排队
- NOIP2013火柴排队[逆序对]
- NOIP 2013 火柴排队
- NOIp 2013 提高组 火柴排队 题解
- [noip2013][codevs3286]火柴排队
- NOIP2013 火柴排队
- [NOIP 2013]火柴排队 逆序对
- 【NOIP2013】火柴排队
- 树状数组 NOIP2013 火柴排队
- 【NOIP2013提高组day1】火柴排队
- NOIp2013 火柴排队
- [NOIP2013] 火柴排队 离散化 树状数组 逆序对
- NOIP2013复赛提高组day1(A:转圈游戏 B:火柴排队 C:货车运输)
- noip2013火柴排队
- NOIP2013 火柴排队
- NOIP 2013 火柴排队
- NOIP 2013 火柴排队 排序不等式 逆序对
- [NOIP2013]火柴排队