NOIP2014提高组解方程

其实没有太难

但是不知道的话想不到

考场上大概有50分吧

 1 #include <iostream>
 2 #include <stdio.h>
 3 #include <queue>
 4
 5 using namespace std;
 6
 7 int mod[7 + 2] = { 19 , 101 , 11261 , 19997 , 22877 , 21893 , 14843 };
 8 int n , m , ans[1000000 + 2];
 9 char a[100 + 10][10000 + 10];
10 int i , j , k;
11 int power[1000000 + 2];
12 int ver[7][1000000 + 2];
13 queue < int > q;
14 int num;
15
16 bool check( int x )
17 {
18     int i , j , flag = 0;
19     long long ans = 0;
20     power[0] = 1;
21     for( i = 1 ; i <= n ; i++ )
22          power[i] = power[i - 1] * x % mod[k];
23     for( i = 0 ; i <= n ; i++ )
24     {
25          if( a[i][0] != ‘-‘ )
26              ans += ver[k][i] * power[i];
27          else
28              ans -= ver[k][i] * power[i];
29          ans %= mod[k];
30     }
31     while( ans < 0 )
32         ans += mod[k];
33     return !( ans % mod[k] );
34 }
35
36 int main()
37 {
38     scanf( "%d %d" , &n , &m );
39     for( i = 0 ; i <= n ; i++ )
40          scanf( "%s" , a[i] );
41     for( k = 0 ; k < 7 ; k++ )
42         for( i = 0 ; i <= n ; i++ )
43             for( j = 0 ; a[i][j] ; j++ )
44             {
45                 if( a[i][j] == ‘-‘ )
46                     continue;
47                 ver[k][i] *= 10;
48                 ver[k][i] += a[i][j] - ‘0‘;
49                 ver[k][i] %= mod[k];
50             }
51     for( k = 0 ; k < 7 ; k++ )
52          for( i = 0 ; i < mod[k] && i <= m ; i++ )
53               if( check( i ) )
54                   for( j = i ; j <= m ; j += mod[k] )
55                        ans[j]++;
56     for( i = 1 ; i <= m ; i++ )
57          if( ans[i] == 7 )
58          {
59              num++;
60              q.push( i );
61          }
62     printf( "%d\n" , num );
63     while( !q.empty() )
64          printf( "%d\n" , q.front() ) , q.pop();
65     return 0;
66 }

时间: 2024-10-26 18:08:36

NOIP2014提高组解方程的相关文章

[NOIP2014提高组]解方程

题目:BZOJ3751.洛谷P2312.UOJ#20.Vijos P1910.codevs3732. 题目大意:已知多项式方程: 求这个方程在[1, m]内的整数解(n 和 m 均为正整数). 解题思路:因为$0=0$(废话),能得出$0+x·p\equiv 0(mod\ p)$. 也就是当方程右边为0时,方程左边mod p为0. 但方程左边mod p等于0时,方程右边不一定等于0. 但是也不一定不等于0. 所以我们如果多引入几个p(最好是素数),对其进行测试,发现都为0的话,那我们就可以认为它

NOIP2014提高组总结

-by mps 尽管今年没参加NOIP2014提高组,但是做了一下,还是有感受的,在这里写出我500分的思路(满分以后会更改,毕竟能力有限......) Day 1 T1 生活大爆炸版石头剪子布 [题目大意] 石头剪子布大家都玩过,只不过这题加了“斯波克”和“蜥蜴人”,事实上还是蛮简单的,有基本逻辑推理常识和基本代码处理能力即可AC,放在PJ都是第一题的难度... 一般有三种做法: 文艺青年:写个矩阵来表示得失,注意要判断两次(甲对乙及乙对甲) 普通青年:16个if嵌套 二B青年:25个if无嵌

[NOIP2014] 提高组 洛谷P2038 无线网络发射器选址

题目描述 随着智能手机的日益普及,人们对无线网的需求日益增大.某城市决定对城市内的公共场所覆盖无线网. 假设该城市的布局为由严格平行的129 条东西向街道和129 条南北向街道所形成的网格状,并且相邻的平行街道之间的距离都是恒定值 1 .东西向街道从北到南依次编号为0,1,2…128 , 南北向街道从西到东依次编号为0,1,2…128 . 东西向街道和南北向街道相交形成路口,规定编号为x 的南北向街道和编号为y 的东西向街道形成的路口的坐标是(x , y ). 在 某 些 路口存在一定数量的公共

【NOIP之旅】NOIP2014 day2 T3 解方程

3.解方程 (equation.cpp/c/pas) [问题描述] 已知多项式方程: 求这个方程在[1, m]内的整数解(n和m均为正整数).   [输入] 输入文件名为equation.in. 输入共n+2行. 第一行包含2个整数n.m,每两个整数之间用一个空格隔开. 接下来的n+1行每行包含一个整数,依次为a0,a1,a2,……,an. [输出] 输出文件名为equation.out. 第一行输出方程在[1, m]内的整数解的个数. 接下来每行一个整数,按照从小到大的顺序依次输出方程在[1,

noip2014 提高组

T1 生活大爆炸版 石头剪刀布 题目传送门 就是道模拟题咯 #include<algorithm> #include<cstdio> #include<cstring> using namespace std; int read(){ int ans=0,f=1,c=getchar(); while(c<'0'||c>'9'){if(c=='-') f=-1; c=getchar();} while(c>='0'&&c<='9')

【学术篇】luogu1351 [NOIP2014提高组] 联合权值

一道提高组的题..... 传送门:题目在这里.... 现在都懒得更自己的blog了,怕是太颓废了_ (:з」∠) _ 好久没做题了,手都生了.(好吧其实是做题方面手太生了) 这题我都不想讲了,把代码一贴就算了呗.. 但还是要说说的.... 首先,题目里说:"无向连通图G 有n 个点,n - 1 条边." 我们可以知道这是一棵树(怕不是废话..),这样遍历的时候就能保证是O(n)级别了.. 找最大值 很简单,遍历树的时候找一下与每个点相连的点的最大值和次大值一乘就完了...显然这么贪心是

[NOIP2014] 提高组 洛谷P2312 解方程

题目描述 已知多项式方程: a0+a1x+a2x^2+..+anx^n=0 求这个方程在[1, m ] 内的整数解(n 和m 均为正整数) 输入输出格式 输入格式: 输入文件名为equation .in. 输入共n + 2 行. 第一行包含2 个整数n .m ,每两个整数之间用一个空格隔开. 接下来的n+1 行每行包含一个整数,依次为a0,a1,a2..an 输出格式: 输出文件名为equation .out . 第一行输出方程在[1, m ] 内的整数解的个数. 接下来每行一个整数,按照从小到

[NOIP2014] 提高组 洛谷P2296 寻找道路

题目描述 在有向图G 中,每条边的长度均为1 ,现给定起点和终点,请你在图中找一条从起点到终点的路径,该路径满足以下条件: 1 .路径上的所有点的出边所指向的点都直接或间接与终点连通. 2 .在满足条件1 的情况下使路径最短. 注意:图G 中可能存在重边和自环,题目保证终点没有出边. 请你输出符合条件的路径的长度. 输入输出格式 输入格式: 输入文件名为road .in. 第一行有两个用一个空格隔开的整数n 和m ,表示图有n 个点和m 条边. 接下来的m 行每行2 个整数x .y ,之间用一个

[NOIP2014] 提高组 洛谷P1941 飞扬的小鸟

题目描述 Flappy Bird 是一款风靡一时的休闲手机游戏.玩家需要不断控制点击手机屏幕的频率来调节小鸟的飞行高度,让小鸟顺利通过画面右方的管道缝隙.如果小鸟一不小心撞到了水管或者掉在地上的话,便宣告失败. 为了简化问题,我们对游戏规则进行了简化和改编: 游戏界面是一个长为n ,高为 m 的二维平面,其中有k 个管道(忽略管道的宽度). 小鸟始终在游戏界面内移动.小鸟从游戏界面最左边任意整数高度位置出发,到达游戏界面最右边时,游戏完成. 小鸟每个单位时间沿横坐标方向右移的距离为1 ,竖直移动