#55568: c語言完整解答


soul964420@gmail.com (ziptee)


#include<stdio.h>
void reverse(int len,char*c){
    for (int i=0;i<len/2;i++){
        char temp=c[i];
        c[i]=c[len-1-i];
        c[len-1-i]=temp;
    }
}
void right(int n,int t,char *c){
    reverse(n,c);
    reverse(t,c);
    reverse(n-t,c+t);
}
int main(){
    int m,n,k;
    scanf("%d%d%d",&m,&n,&k);
    char c[m][n+1];
    for (int i=0;i<m;i++){
        scanf("%s",c[i]);
    }
    int total=0;
    for (int i=0;i<k;i++){
        for (int j=0;j<m;j++){
            int t;
            scanf("%d",&t);
            t=t%n;
            if (t>0){
                right(n,t,c[j]);
            }
            else if (t<0){
                t+=n;
                right(n,t,c[j]);
            }
        }
        for (int j=0;j<n;j++){
            int count[26]={0};
            for (int k=0;k<m;k++){
                count[c[k][j]-'a']++;
            }
           int maxc=0;
           for (int k=0;k<26;k++){
                if (count[k]>maxc){
                    maxc=count[k];
                }
           }
           total+=maxc;
        }
    }
    printf("%d",total);
    return 0;
}