传送门
B群的判定
#include <stdio.h>
#include<string.h>
#define ll long long
int arr[110];
int vis[110];
int num[110];
int b[110];
int main()
{
int n, m, q, i, j, flage;
while(~scanf("%d %d %d", &n, &m, &q))
{
flage = 1;
memset(b,0,sizeof(b));
memset(vis,0,sizeof(vis));/*判断元素是否存在*/
memset(num,-1,sizeof(num));/*存逆元*/
memset(arr,-1,sizeof(arr));/*存初始数据*/
for(i=0; i<n; i++)
{
scanf("%d", &arr[i]);
vis[arr[i]]++;
}
for(i=0; i<q; i++)
{
scanf("%d", &b[i]);
}
if(vis[0]==0)/*判断是否存在幺元*/
{
flage = 0;
}
num[0]=0;/*0的逆元是0*/
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
{
if(vis[(arr[i]+arr[j])%m]&&(arr[i]+arr[j])%m==0)
{
num[arr[i]]=arr[j];
num[arr[j]]=arr[i];
break;
}
}
}/*判断封闭性与逆元存在*/
for(i=0; i<n; i++)
{
if(num[arr[i]]==-1)
{
flage =0;
break;
}
}
if(!flage)
{
printf("-1\n");
}
else
{
for(i=0; i<q; i++)
{
printf("%d\n", num[b[i]]);
}
}
}
return 0;
}
PS:这是别人的。