代码中转站

Posted on 2019-10-22 21:03  opethrax  阅读(309)  评论(0编辑  收藏  举报
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;

const int N=505;

int n,m,p,ans;
int t[N<<1],r[N];
int a[N][N];

void init(){
    sort(t+1,t+m+1);
    r[1]=t[1]+p-t[m];
    for(int i=2;i<=m;i++)r[i]=t[i]-t[i-1];
    for(int i=1;i<=m;i++)t[i]=r[i];
}

int main(){
	freopen("plate.in","r",stdin);
	freopen("plate.out","w",stdout);
    scanf("%d%d%d",&n,&m,&p);
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++)scanf("%d",&t[j]);
        init();
        for(int j=1;j<=m;j++)t[j+m]=t[j];
        int p,p1=1,p2=2,len;
        while(p1<=m&&p2<=m){
        	len=0;
            while(t[p1+len]==t[p2+len]&&len<m)++len;
            if(len==m)break;
            if(t[p1+len]>t[p2+len]){
                p1=p1+len+1;
                if(p1==p2)++p2;
            }
            else {
                p2=p2+len+1;
                if(p1==p2)++p1;
            }
        }
        p=min(p1,p2);
        for(int j=1;j<=m;j++)a[i][j]=t[p+j-1];
    }
    for(int i=1;i<=n;i++)
        for(int j=i+1;j<=n;j++){
        	bool f=1;
            for(int k=1;k<=m;k++){
                f&=(a[i][k]==a[j][k]);
            }
            ans+=f;
        }
    printf("%d\n",ans);
    return 0;
}