Topcoder SRM 657DIV2

前言:

      像我这样一直在DIV2的弱菜。。不知道说什么了。

A:一定判断有8个‘R’,每行 每列只有一个

B题:大概是  int E,int EM,int M,int MH,int H

然后EM可以给值到E,M,MH可以给值到H,M;

我的做法二分,然后判断。

C:遇到数论就跪。。

求a*x^2+b*x+c=0 (mod p);p=10^9;

不满足输出-1 a,b,c,x 都在【0,999999999】;

首先p=10^9本来就很特殊,所以从这里考虑

p=2^9*5^9;

f[x]=a*x^2+b*x+c;

先求出f[x1]=0 (mod 2^9);

然后 f[x1+2^9*k]=0 (mod 5^9);

因为求也能f[x1+2^9*k】=0(mod 2^9);所以满足

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cmath>
 4 #include <cstdlib>
 5 #include <algorithm>
 6 #include <cstring>
 7 #include <vector>
 8 
 9 #define ll long long
10 #define ull unsigned long long
11 using namespace std;
12 
13 #define mod 1000000000
14 #define N 999999999
15 
16 class PolynomialRemainder {
17     public:
18 
19     int findRoot(int a, int b, int c) {
20     ll x=0;
21     ll mod1=1<<9;
22     ll mod2=1;
23     for (int i=1;i<=9;i++) mod2*=5;
24 
25     for (x=0;x<mod1;x++)
26     if ((x*x*a+b*x+c) % mod1 ==0) break;
27 
28     if (x==mod1) return -1;
29 
30     for (;x<mod1*mod2;x+=mod1)
31     {
32          if ((x*x%mod2*a+b*x+c) % mod2 ==0) return x;
33     }
34     return -1;
35     }
36 };

所以关键是10^9的分化。

posted on 2015-04-28 20:59  forgot93  阅读(148)  评论(0编辑  收藏  举报

导航