$ソル$
列挙型ソリューション+ +秦九韶式剰余。
$コード$
書式#include <iostreamの> の#include <cstdioを> する#include <CStringの> の#include <キュー> の#include <アルゴリズム> に#define ILインライン の#define Rgを登録し ます。#define行く(I、A、B)は(RG int型I = A ; iが<= Bと; ++ i)は、 の#defineはい(I、B)(RG INT I = Aの; I> = B; - I) の#define E(I、U)のために(RG INT I = [U] bは、I; I [i]が.nt)= の#defineを MEM(A、B)のmemset(A、B、はsizeof(A)) の#define LLが長い長い の#define ULL符号なし長い長 の#define DBダブル の#define INF 2147483647 使って 名前空間はstdを、 CONST int型 N = 1000010、MOD = 1000000007 ; ILのINTのリード() { LL、X = 0。int型の Y = 1。チャー C = GETCHAR()。 一方、(C < ' 0 ' || C> ' 9 '){ もし、(C == ' - ')Y = - 1 ; C = GETCHAR();} 一方、(C> = ' 0 ' && C <= ' 9 '){X =((X << 1)%MOD +(X <3)%C- + MOD ' 0 ')%MOD; C = GETCHAR();} 戻りのx *のY。 } int型、N M、CTのように、[N]、[N]。 ILのブール CK(INT X) { LLのRET = 0 。 はい(I、N、0)RET =(RET *第X%のMOD + [I])%MOD。 もし(RET == 0)リターン 1。リターン 0 ; } int型のmain() { N =(読み取り)、M = read()は、 行く(I、0、N)[I] = 読み取ります(); 行く(I、1、m)の場合(CK(I))のような [++ CT] = I。 printf(" %d個の\ n " 、CT)。 行く(I、1、CT)のprintf(" %Dを\ n "、として[I])。 リターン 0 ; }