[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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值