多校练习赛 第五场

来源:互联网 发布:农业银行软件官方下载 编辑:程序博客网 时间:2024/05/16 09:51

多校第五场

1001 Inversion

     刚看到这道题的时候就知道是归并排序了,可是当时没有掌握清楚,在网上找了些例题,感觉跟题意差太远用不

上,结果刚才仔细看了下,其实就是归并排序的模板题,哎。。悲剧呀!!!

   

#include<cstdio>#include<iostream>#define maxn 100010using namespace std;int a[maxn],tmp[maxn];__int64 sum;void merge(int left,int mid,int right){    int i,j,k;    i=left,j=mid+1,k=1;    while(i<=mid&&j<=right)    {        if(a[i]>a[j])            {                tmp[k++]=a[j++];                 sum+=mid+1-i;            }        else tmp[k++]=a[i++];    }    while(i<=mid) tmp[k++]=a[i++];    while(j<=right) tmp[k++]=a[j++];    for(i=left,k=1;i<=right;i++,k++)        a[i]=tmp[k];}void mergesort(int left,int right){    if(left<right)    {        int mid=(left+right)/2;        mergesort(left,mid);        mergesort(mid+1,right);        merge(left,mid,right);    }}int main(){    int m,n;    while(~scanf("%d%d",&m,&n))    {        sum=0;        for(int i=0;i<m;i++) scanf("%d",&a[i]);        mergesort(0,m-1);        if(sum>=n)  printf("%I64d\n",sum-n);        else  printf("0\n");       // printf("%I64d\n",sum);    }    return 0;}


1010  Matrix  multiplication

       比赛的时候看到这道题是n*n矩阵的运算,自己没有模板,感觉很难的样子,然后也就没作,然后队友也交了

几发结果TLE了。赛后看别人的解题报告才发现,原来暴高就可以过,前提是去掉数组a中为0的元素,要不然就

TLE,哎,水。

         
#include<iostream>#include<cstdio>#include<cstring>#define maxn 1000using namespace std;int a[maxn][maxn],b[maxn][maxn],c[maxn][maxn];int main(){    int n;    while(scanf("%d",&n)!=EOF)    {        for(int i=1;i<=n;i++)          for(int j=1;j<=n;j++)               {                   scanf("%d",&a[i][j]);                   a[i][j]%=3;               }         for(int i=1;i<=n;i++)           for(int j=1;j<=n;j++)              {                  scanf("%d",&b[i][j]);                   b[i][j]%=3;              }         memset(c,0,sizeof(c));         for(int i=1;i<=n;i++)            for(int j=1;j<=n;j++)             {                 if(a[i][j]==0)  continue;                   for(int k=1;k<=n;k++)                       c[i][k]=(c[i][k]+a[i][j]*b[j][k])%3;             }        for(int i=1;i<=n;i++)            for(int j=1;j<=n;j++)                {                    if(j!=n) printf("%d ",c[i][j]%3);                    else printf("%d\n",c[i][j]%3);                }    }    return 0;}


 

0 0
原创粉丝点击