p2457.cpp

来自「高手写的所有acm例程 在acm.zju.edu.cn 上的题目的例程」· C++ 代码 · 共 44 行

CPP
44
字号
#include <stdio.h>
#include <string.h>

const   int     maxm    = 1000;

int     opt [maxm];
int     len , data [maxm] , pred [maxm] , last [maxm] , ans [maxm];
int     n , m , a , max , i , t , j;

main ()
{
        while ( scanf ( "%d %d" , &n , &m) != EOF ) {

                memset ( opt , 0 , sizeof ( opt ));
                len = 0;
                opt [0] = 1; opt [1] = 1; data [0] = 1; last [1] = 1;
                max = 1;

                for ( j = 1; j <= n; j ++ ) {
                        scanf ( "%d" , &a );
                        if ( opt [a] ) opt [a] ++;
                        if ( opt [a] != m && a && max != m - 1 ) for ( i = len; i >= 0; i -- ) {
                                t = ( data [i] * a ) % m;
                                if ( !opt [t] ) {
                                        opt [t] = 1; data [++ len] = t;
                                        pred [t] = j; last [t] = data [i];
                                        if ( t > max ) max = t;
                                }
                        }
                }


                printf ( "%d\n" , max );
                
                for ( len = 0 , i = max; i != 1; i = last [i] ) ans [len++] = pred [i];

                for ( i = len - 1; i >= 0; i -- ) {
                        if ( i != len - 1 ) printf ( " " );
                        printf ( "%d" , ans [i] );
                        }
                if ( i ) printf ( "\n" );
        }
}
 

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?