【NOIP 2013 DAY.1】火柴排队【codevs 3286】
来源:互联网 发布:相册书制作软件 编辑:程序博客网 时间:2024/06/05 06:17
分析:贪心策略。第一行第一小对第二行第一小、第一行第二小对第二行第二小。。。类推。
即:排序,求排序的次数。
(归并排序求逆序对)【记录交换的次数即是答案】*推荐使用归并。本题最优解法。
#include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>#include <algorithm>using namespace std;const int mod=99999997;int a[100005],b[100005];int l[100005],r[100005];int s[100005],t[100005];int rr[100005];int sum;int n;void m_sort(int x,int y){ if(y-x>1) { int m=x+(y-x>>1); int p=x,q=m,i=x; m_sort(x,m); m_sort(m,y); while(p<m || q<y) { if(q>=y || (p<m && s[p]<=s[q])) t[i++]=s[p++]; else { t[i++]=s[q++]; sum+=m-p; } } for(i=x;i<y;i++) s[i]=t[i]; } sum%=mod;}int main(){ scanf("%d",&n); for(int i=0;i<n;i++) { scanf("%d",a+i); l[i]=a[i]; } for(int i=0;i<n;i++) { scanf("%d",b+i); r[i]=b[i]; } sort(l,l+n); sort(r,r+n); for(int i=0;i<n;i++) { int locB=lower_bound(r,r+n,b[i])-r; rr[locB]=i; } for(int i=0;i<n;i++) { int locA=lower_bound(l,l+n,a[i])-l; s[rr[locA]]=i; } m_sort(0,n); printf("%d",sum); return 0;}
(线段树/树状数组求逆序对)
#include<iostream>#include<cstdlib>#include<cstdio>#include<algorithm>using namespace std;struct stone{int num,c;} l1[100010],l2[100010];int n,c[100010];int tree[100010];int lowbit(int x){return (-x)&x;}bool cmp(stone x,stone y){return x.c<y.c;}void insert(int x){while(x<=n){tree[x]++;x+=lowbit(x);}}int get(int x){int sum=0;while(x>0){ sum+=tree[x]; x-=lowbit(x);}return sum;}int main(){cin>>n;for(int i=1;i<=n;i++){scanf("%d",&l1[i].c);l1[i].num=i; }for(int i=1;i<=n;i++){scanf("%d",&l2[i].c);l2[i].num=i; }sort(l1+1,l1+n+1,cmp);sort(l2+1,l2+n+1,cmp);long long cnt=0;for(int i=1;i<=n;i++){c[l1[i].num]=l2[i].num;}//for(int i=1;i<=n;i++) cout<<c[i]<<" ";for(int i=1;i<=n;i++){insert(c[i]);cnt+=i-get(c[i]);cnt=cnt%99999997;}cout<<cnt;return 0;}
std::
#include<cstdio>#include<algorithm>#define MAXN 100000using namespace std;struct node{int x,cnt;}A[MAXN+10],B[MAXN+10];int aa[MAXN+10];int T[MAXN+10];int ans=0;bool cmp(node a,node b){return a.x<b.x;}void marge(int l,int mid,int r) { int i=l,j=mid+1,k; for(k=l;k<=r;k++) if((i<=mid)&&((j>r)||(aa[i]<=aa[j]))) T[k]=aa[i++]; else{ T[k]=aa[j++]; ans+=mid-i+1; ans%=99999997; } for(i=l;i<=r;i++) aa[i]=T[i]; } void margef(int l,int r) { if(l<r) { int mid=(l+r)/2; margef(l,mid); margef(mid+1,r); marge(l,mid,r); } } int main(){freopen("match.in","r",stdin); freopen("match.out","w",stdout); int n,i;scanf("%d",&n);for(i=1;i<=n;i++){scanf("%d",&A[i].x);A[i].cnt=i;}for(i=1;i<=n;i++){scanf("%d",&B[i].x);B[i].cnt=i;}sort(A+1,A+1+n,cmp);sort(B+1,B+1+n,cmp);for(i=1;i<=n;i++)aa[A[i].cnt] = B[i].cnt; margef(1,n);printf("%d\n",ans%99999997);return 0;}my ac code:
#include<cstdio>#include<iostream>#include<algorithm>#include<cmath>#define maxn 100010int n;int aa[maxn],T[maxn];typedef struct{int val,id;}node;node a[maxn],b[maxn];int ans;bool cmp(node A,node B){return A.val<B.val;}void marge(int l,int r){if(l==r)return;int mid=(l+r)/2;marge(l,mid);marge(mid+1,r);int i=l,j=mid+1,k;for(k=l;k<=r;k++){if((i<=mid)&&((j>r)||aa[i]<=aa[j]))T[k]=aa[i++];else{T[k]=aa[j++];ans+=mid-i+1;ans%=99999997;}}for(i=l;i<=r;i++)aa[i]=T[i];}int main(){freopen("match.in","r",stdin);freopen("match.out","w",stdout);scanf("%d",&n);for(int i=1;i<=n;i++){scanf("%d",&a[i].val);a[i].id=i;}for(int i=1;i<=n;i++){scanf("%d",&b[i].val);b[i].id=i;}std::sort(a+1,a+1+n,cmp);std::sort(b+1,b+1+n,cmp);for(int i=1;i<=n;i++)aa[a[i].id]=b[i].id;marge(1,n);printf("%d\n",ans%99999997); return 0;}
1 0
- 【NOIP 2013 DAY.1】火柴排队【codevs 3286】
- Noip 2013 codevs 3286 火柴排队
- 【codevs 3286】火柴排队
- COdevs 3286 火柴排队
- NOIP 2013 火柴排队
- NOIP 2013 火柴排队
- NOIP 2013 火柴排队
- 【noip 2013】火柴排队
- NOIP-2013火柴排队
- NOIP 2013 火柴排队
- 【noip 2013】火柴排队
- Noip 2013 火柴排队
- 归并排序求逆序对 CODEVS 1688 && NOIP 2013 火柴排队
- 3286 火柴排队 2013年NOIP全国联赛提高组
- 火柴排队(codevs 3286)题解
- Codevs 3286&&洛谷 P1966 火柴排队
- Codevs 火柴排队
- 2013年NOIP提高组 火柴排队
- Install Ajenti Control Panel in RHEL / CentOS / Debian / Ubuntu
- HDU-ACM2081
- 二叉索引树(树状数组)
- Java 自定义注解
- vb控件相关ocx文件注册问题
- 【NOIP 2013 DAY.1】火柴排队【codevs 3286】
- HDU-ACM2083
- 聊聊计算机中的编码(Unicode,GBK,ASCII,utf8,utf16,ISO8859-1等)以及乱码问题的解决办法
- Hibernate运行报错Unknown entity: domain.UserBean
- ZOJ 3328 Wu Xing
- 开源C++库:ACE及其安装使用
- Python脚本暴力破解web登录
- 《剑指offer》 02 单例模式
- 使用CMD 命令 ping 某段IP并保存到文件中