[P2312][NOIP2014]解方程

原題鏈接

水了個70
就是正常模擬+取模
多取幾個模數

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cstdlib>
#include<climits>
#include<queue>
#include<vector>
#include<ctime>
#define LL long long
using namespace std;

int prime[4]={0,10007,10917,30071};
char s[10005];
int n,m,x,a[105][4],tot,ans[105],sum1,sum2,sum3;

void work(int p)
{
    int len,tmp,i,f=1;

    len=strlen(s);

    for(i=0;i<len;i++)
    {   
        if(s[i]=='-') f=-1;
        else
        {
            tmp=s[i]-'0';

            a[p][1]=(a[p][1]*10+tmp)%prime[1];
            a[p][2]=(a[p][2]*10+tmp)%prime[2];      
            a[p][3]=(a[p][3]*10+tmp)%prime[3];              
        }
    }

    a[p][1]=f*a[p][1];
    a[p][2]=f*a[p][2];
    a[p][3]=f*a[p][3];      
}

int main()
{   
    int i,j;

    scanf("%d%d",&n,&m);

    for(i=0;i<=n;i++)
    {
        scanf("%s",s);
        work(i);    
    }

    for(i=1;i<=m;i++)
    {
        sum1=0;sum2=0;sum3=0;

        for(j=n;j>=1;j--)
        {
            sum1=((sum1+a[j][1])*i)%prime[1];
            sum2=((sum2+a[j][2])*i)%prime[2];
            sum3=((sum3+a[j][3])*i)%prime[3];               
        }

        sum1=(sum1+a[0][1])%prime[1];
        sum2=(sum2+a[0][2])%prime[2];
        sum3=(sum3+a[0][3])%prime[3];           

        if((sum1==0)&&(sum2==0)&&(sum3==0)) 
        {
            tot++;
            ans[tot]=i;
        }
    }

    printf("%d\n",tot);

    for(i=1;i<=tot;i++)
        printf("%d\n",ans[i]);

    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章