开了快读快写和O2,但还是TLE两个点
查看原帖
开了快读快写和O2,但还是TLE两个点
278211
飘啊飘楼主2020/6/18 08:40
#include<bits/stdc++.h>
using namespace std;
long long ans;
long long  n,m,k;
long long f[100005];
struct mm
{
    long long x,y,z;
}a[100005];
bool cmp(mm xx,mm yy)
{
    if(xx.y==yy.y)
	{
		return xx.z<yy.z;
	}
    else
	{
		return xx.y<yy.y; 
	} 
}

int read()        
{        
    int s=0,f=1;        
    char ch=getchar();        
    while(!isdigit(ch)) 
	{        
        if(ch=='-') 
		{
			f=-1;
		}        
        ch=getchar();        
    }        
    while(isdigit(ch)) 
	{        
        s=s*10+ch-'0';        
        ch=getchar();        
    }        
    return s*f;        
}        
void write(int x)        
{        
    if(x<0) 
	{        
    	putchar('-');        
        x=-x;        
    }        
    if(x>9)
	{
		write(x/10);
	}               
    putchar(x % 10 + '0');        
    return ;        
}

int main()
{
    n=read();
    m=read();
    for(int i=1;i<=n;i++)
    {
        a[i].x=read();
        a[i].z=i;
    }
    for(int i=1;i<=n;i++)
    {
        a[i].y=read();
        f[a[i].y]++;
    }
    sort(a+1,a+n+1,cmp);
    for(int i=1;i<=n;i+=f[k])
    {
        k++;
        for(int j=i;j<=i+f[k]-1;j++)
        {
            for(int t=j+1;t<=i+f[k]-1;t++)
            {
				if(a[t].y!=a[j].y)
				{
					break;
				}
                else if((a[t].z+a[j].z)%2==0)
				{
					ans=(ans+(a[t].z+a[j].z)*(a[t].x+a[j].x))%10007;
				}
            }
        }
    }
    write(ans%10007);
 //   putchar(' ');
	return 0;
}
2020/6/18 08:40
加载中...