当前位置: 首页 > news >正文

陕西省建设厅特种工报名网站/海外推广运营

陕西省建设厅特种工报名网站,海外推广运营,女生学建筑选择什么专业,酒店网站怎么做Description 已知多项式方程:a0a1*xa2*x^2...an*x^n0 求这个方程在[1,m]内的整数解(n和m均为正整数)。Input 第一行包含2个整数n、m,每两个整数之间用一个空格隔开。接下来的n1行每行包含一个整数,依次为a0,a1,a2,...,…

Description

已知多项式方程:a0+a1*x+a2*x^2+...+an*x^n=0

求这个方程在[1,m]内的整数解(n和m均为正整数)。
 

Input

第一行包含2个整数n、m,每两个整数之间用一个空格隔开。
接下来的n+1行每行包含一个整数,依次为a0,a1,a2,...,an。

Output

 第一行输出方程在[1,m]内的整数解的个数。

接下来每行一个整数,按照从小到大的顺序依次输出方程在[1,m]内的一个整数解。
 

Sample Input

2 10
2
-3
1

Sample Output

2
1
2

HINT

 对于100%的数据,0<n≤100,|ai|≤1010000,an≠0,m≤1000000。

 

题解:

  到现在还是不怎么清楚正解到底是什么,大多数人应该都是选择了取模吧。但是这个明显是一种很不稳定的做法,很难保证复杂度和正确性两者兼得,也许事后可以AC,但是考试的时候谁能有足够的信心保证自己写对了呢?

  因为a数组的值极其之大,而m相对来说要小得多,所以可以考虑把结果取模,其实就像之前提到的字符串Hash一样,这是无法保证完美的正确性的,但是出现冲突的概率也是极小。这取决于你所取的模及其大小。

  也许最开始可以想到的就是取一个9位数的大模,这样是可以得70分的,也是相对稳妥的一种方法,时间复杂度为O(m * len),len表示a[i]的位数。如何减小复杂度?通过平时数学知识的了解,我们知道,设当前所取的模为MOD,若x = i时满足条件,则x + MOD必定也是满足的,所以我们可以把复杂度降到O(MOD + m)。

  这又有一个问题了,之前所取的模比len还要大一些的,那就不得不缩小MOD了。但是如果MOD过小的话,正确性更加无法保证。如同字符串Hash一样,我们也可以选择取多个模,当且仅当在所有模数情况下满足,这个数才满足。然而由于数不能过大,要找到真正合适的又能够不超时的(这里不说官方数据,官方数据比较水,但是BZOJ上的数据到现在我还是过不了),很难。

  所以在知道正解之前,我觉得这就是一道RP题啊。

 

代码(官方数据100分,BZOJ超时,Hash值来自hzwer)

---------------------------------------------------------------------------------------------------

 

#include <cstdio>
#include <cstring>

 

#define MAXN 105
#define MAXM 1000005

 

#ifdef WIN32
#define LLD "%I64d"
#else
#define LLD "%lld"
#endif

 

typedef long long ll;

 

const ll pri[5] = {11261, 19997, 22877, 21893, 14843};

 

ll max(ll a, ll b) { return a > b ? a : b; }

 

ll min(ll a, ll b) { return a < b ? a : b; }

 

ll n, m, a[5][MAXN], f[5][MAXM], l, ans[MAXM], x, tot;
char ch[MAXM];

 

ll calc(ll o, ll k)
{
  ll x = 1, res = 0;
  for (ll i = 0; i <= n; i++) (x *= o) %= pri[k], (res = x * a[k][i]) %= pri[k];
  return res == 0;
}

 

int main()
{
  freopen("3751.in", "r", stdin);
  freopen("3751.out", "w", stdout);
  scanf(LLD LLD, &n, &m);
  for (ll i = 0; i <= n; i++)
  {
    scanf("%s", ch), l = strlen(ch), x = ch[0] == '-';
    for (ll k = 0; k <= 4; k++)
      for (ll j = x ? 1 : 0; j <= l - 1; j++)
        (a[k][i] = (a[k][i] * 10) + ch[j] - '0') %= pri[k];
    if (x) for (ll k = 0; k <= 4; k++) a[k][i] = pri[k] - a[k][i];
  }
  for (ll k = 0; k <= 4; k++)
    for (ll i = 0; i < pri[k]; i++) f[k][i] = calc(i, k);
  for (int i = 1; i <= m; i++)
  {
    int get = 1;
    for (int k = 0; k <= 4; k++) if (!f[k][i % pri[k]]) { get = 0; break; }
    if (get) ans[++tot] = i;
  }
  printf(LLD "\n", tot);
  for (int i = 1; i <= tot; i++) printf(LLD "\n", ans[i]);
  return 0;
}

 

---------------------------------------------------------------------------------------------------

转载于:https://www.cnblogs.com/jinkun113/p/4918978.html

http://www.jmfq.cn/news/4754377.html

相关文章:

  • 求合伙人做网站/谷歌浏览器下载官网
  • 寿光专业做网站/牛奶软文广告营销
  • godaddy 搭建网站/宁波seo自然优化技术
  • 腾讯广告代理商/东莞优化疫情防控措施
  • 做网站的图片从哪里找/门户网站怎么做
  • 关于做门户网站专栏内容通知/手游推广代理平台有哪些
  • 有哪些做平面设计好的网站/搜索引擎营销有哪些
  • 山东网站建设企业/91关键词
  • 高端网站开发培训/适合小学生的新闻事件
  • 广州公司网站制作/企业营销策划公司
  • 做网站的靠什么赚钱/营销自动化
  • 广州网站导航/b站新人视频怎么推广
  • 网站建设公司彩铃/自己有货源怎么找客户
  • java做网站后台怎么样/公司网站怎么建立
  • 软件开发是吃青春饭的吗/整站优化关键词排名
  • b2c网站商城建设方案/怎么给产品做网络推广
  • 西安市做网站的公司/百度知道官网入口
  • 网站编辑 seo/网络营销的主要传播渠道是
  • 观澜做网站/在线营销推广
  • 石家庄模板建站代理/快速推广
  • wordpress官方网站/某一网站seo策划方案
  • 厦门网站建设开发公司/网络推广优化平台
  • 十大平面设计公司/外贸网站seo教程
  • 业务型网站做seo/代做seo关键词排名
  • 东莞视频课程网站建设/广告推广平台哪个好
  • 装饰公司网站建设/沧州网站seo
  • 东莞网站建设 旅游/沈阳全网推广公司哪家好
  • 手把手做网站页面/培训教育机构
  • wordpress问答社区/新手seo要学多久
  • 盘锦网站制作公司/怎样做关键词排名优化