2016.10.30 NOIP模拟赛 day2 AM 整理

题目+数据:链接:http://pan.baidu.com/s/1gfBg4h1 密码:ho7o

总共得了:130分,

1:100分  2:30分(只会这30分的暴力) 3:0(毫无思路)

虽然不高,但是比较满意,因为把自己会的分数都拿到了。

T1:100分

  1 /*
  2 T1明显是个数论题。
  3 正确的思路:把n!质因数分解,把所有质因数的指数都取到最大的偶数,它们的乘积便是最终的结果。
  4 有一种很快的方法在Eular筛中可以n!的质因数分解。
  5 if(!is_prim[i])
  6 {
  7     prim[++prim[0]]=i;
  8     ll x=n;
  9     while(x)
 10     {
 11         cs[prim[0]]+=x/prim[prim[0]];
 12         x/=prim[prim[0]];
 13     }
 14 }
 15 具体的可以用“抽数法(反正我这么叫它)”来证明。
 16
 17 */
 18 #define N 5000010
 19 #include<iostream>
 20 using namespace std;
 21 #include<cstdio>
 22 #define Mod 100000007
 23 typedef long long ll;
 24 ll prim[N]={0};
 25 int cs[N]={0};
 26 bool is_prim[N];
 27 int n;
 28 void eular()
 29 {
 30     for(ll i=2;i<=n;++i)
 31     {
 32         if(!is_prim[i])
 33         {
 34             prim[++prim[0]]=i;
 35             ll x=n;
 36             while(x)
 37             {
 38                 cs[prim[0]]+=x/prim[prim[0]];
 39                 x/=prim[prim[0]];
 40         }
 41     }
 42     for(int j=1;j<=prim[0];++j)
 43     {
 44             if(i*prim[j]>n) break;
 45             is_prim[i*prim[j]]=true;
 46             if(i%prim[j]==0) break;
 47     }
 48     }
 49 /*    for(int i=1;i<=prim[0];++i)
 50       printf("%d\n",prim[i]);*/
 51 }
 52 void fj()
 53 {
 54     for(ll i=2;i<=n;++i)
 55     {
 56         ll x=i;
 57         while(x!=1)
 58         {
 59             for(int j=1;j<=prim[0];++j)
 60             {
 61                 if(x%prim[j]==0)
 62                 {
 63                     cs[j]++;
 64                     x/=prim[j];
 65                     break;
 66                 }
 67             }
 68         }
 69     }
 70 }
 71 ll quick_mod(ll a,ll b)//a^b
 72 {
 73     ll ret=1;
 74     while(b)
 75     {
 76         if(b&1)
 77         {
 78             ret=(ret*a)%Mod;
 79         }
 80         b>>=1;
 81         a=(a*a)%Mod;
 82     }
 83     return ret;
 84 }
 85 int main()
 86 {
 87     freopen("hao.in","r",stdin);
 88     freopen("hao.out","w",stdout);
 89     scanf("%d",&n);
 90     eular();
 91 //  fj();这是没用这个优化的部分,只能得50分。
 92     ll ans=1;
 93     for(int i=1;i<=prim[0];++i)
 94     {
 95         if(cs[i]%2==0)
 96         {
 97             ans=(ans*quick_mod(prim[i],cs[i]))%Mod;
 98         }
 99         else{
100             ans=(ans*quick_mod(prim[i],cs[i]-1))%Mod;
101         }
102     }
103     cout<<ans%Mod<<endl;
104     fclose(stdin);
105     fclose(stdout);
106     return 0;
107 }

T2:

/*这道题目内部的转化非常巧妙,
首先[l,r]->[0,r]-[0,l-1]
现在只讨论r
Σxi/m -r<=0 --> ∑(xi-r)/m<=0 ==>∑(xi-m)<=0:
题目==>询问有多少区间和小于等于0
做一个前缀和S,现有[a,b] 要满足 s[b]-s[a]<=0 :
询问有多少对a,b使s[b]<=s[a] --> 求逆序对
注意这道题目的转换,十分的巧妙。
--------*****------
另外求逆序对有两种方法:归并排序或者树状数组,第二种请自行百度。
*/

时间: 2024-08-24 21:19:36

2016.10.30 NOIP模拟赛 day2 AM 整理的相关文章

2016.10.30 NOIP模拟赛 day2 PM 整理

满分:300分 直接全部爆零,真的是很坑啊! 10.30的题目+数据:链接:http://pan.baidu.com/s/1jHXLace 密码:i784 T1: 题目中的难点就是每次折叠的点可能应经被覆盖了,我的做法是递归去推出它现在在哪个位置,不仅超时,而且答案错误. 也曾想过用数组去存下它当前的位置,但是被10^18的数据吓到了. 正解:并不是所有的坐标都有用,仅仅是那m个将要用到的点有用,所以每次折叠,就只对之后的有用的k个点进行更新,这样就行了. 时间复杂度O(m^2) 不会超时的.

2016.10.29 NOIP模拟赛 PM 考试整理

300分的题,只得了第三题的100分. 题目+数据:链接:http://pan.baidu.com/s/1o7P4YXs 密码:4how T1:这道题真的是跪在游戏玩少了. 我忽视了游戏中的两个常识:1.开始的序列是无法消除的(这与题目描述明显不符啊),即使有很多可以连消的,而我的程序每次只在插入的位置向两侧寻找可以消除的,自然就错了. 2.开始时的序列居然可以为空,真是让人措手不及! 正确做法:用指针链表,而且不可以用数组模拟.

10.30 NFLS-NOIP模拟赛 解题报告

总结:今天去了NOIP模拟赛,其实是几道USACO的经典的题目,第一题和最后一题都有思路,第二题是我一开始写了个spfa,写了一半中途发现应该是矩阵乘法,然后没做完,然后就没有然后了!第二题的暴力都没码QAQ 现在我来写解题报告了,有点饿了QAQ.. 第一题 题目 1: 架设电话线 [Jeffrey Wang, 2007] 最近,Farmer John的奶牛们越来越不满于牛棚里一塌糊涂的电话服务,于 是,她们要求FJ把那些老旧的电话线换成性能更好的新电话线.新的电话线架设 在已有的N(2 <=

CH Round #55 - Streaming #6 (NOIP模拟赛day2)解题报告

T1九九归一 描述 萌蛋在练习模n意义下的乘法时发现,总有一些数,在自乘若干次以后,会变成1.例如n=7,那么5×5 mod 7=4,4×5 mod 7=6,6×5 mod 7=2,2×5 mod 7=3,3×5 mod 7=1.如果继续乘下去,就会陷入循环当中.萌蛋还发现,这个循环的长度经常会是φ(n),即小于n且与n互质的正整数的个数.例如,φ(7)=6,而上述循环的长度也是6,因为5,4,6,2,3,1共有6个数.再如n=6,那么5×5 mod 6=1.这个循环的长度很短,只有2,而恰好φ

2017.9.24 noip模拟赛 day2—组合数

简化版题意: 给定n,m(n<=m),求C(n,m)的末尾有几个0 输入格式: 第一行一个整数t,代表数据组数. 接下来t行,每行两个整数n,m 输出格式: t行,每行一个整数,代表C(n,m)的末尾0的个数. 样例输入: 310 111 720 4 样例输出: 110 数据范围: 1<=m<=n<=1000000,t<=1000 首先这道题需要知道一个公式:C(n,m)=n!/(n-m)!*m! 然后10=2*5,也就是说,对于一个数,我们将其因数分解,2和5中较少的数的个

NOIP模拟赛 6.29

2017-6-29 NOIP模拟赛 Problem 1 机器人(robot.cpp/c/pas) [题目描述] 早苗入手了最新的Gundam模型.最新款自然有着与以往不同的功能,那就是它能够自动行走,厉害吧. 早苗的新模型可以按照输入的命令进行移动,命令包括‘E’.‘S’.‘W’.‘N’四种,分别对应东南西北.执行某个命令时,它会向对应方向移动一个单位.作为新型机器人,它可以执行命令串.对于输入的命令串,每一秒它会按命令行动一次.执行完命令串的最后一个命令后,会自动从头开始循环.在0时刻时机器人

2012-10-20 NOIP模拟赛

      2012-10-20 NOIP模拟赛 by coolyangzc 共3道题目,时间3小时 题目名 高级打字机 不等数列 经营与开发 源文件 type.cpp/c/pas num.cpp/c/pas exploit.cpp/c/pas 输入文件 type.in num.in exploit.in 输出文件 type.out num.out exploit.out 时间限制 1000MS 1000MS 1000MS 内存限制 256MB 256MB 256MB 测试点 5+(5) 10

【简单思考】noip模拟赛 NTR酋长

NTR酋长 (ntr.pas/.c/.cpp) 黄巨大终于如愿以偿的进入了czy的后宫中……但是czy很生气……他要在黄巨大走到他面前的必经之路上放上几个NTR酋长来阻挡黄巨大. 众所周知,NTR酋长有一个技能是沟壑(F).它会在地图上产生一条长长的障碍物阻挡人前进.Czy打算在一个n*m的矩形(必经之路?)中放上NTR酋长.NTR酋长要一个一个放下去,而且每放一个都会向四角倾斜的方向放出无限长的沟壑,而已经被沟壑挡住的地方就不能再放NTR酋长了. 请注意:不会出现沟壑的路径挡住另一个沟壑的情况

【noip模拟赛】 射击

这题似乎是什么安阳一中的模拟题,不管了,反正是学长出的noip模拟赛里面的题目.... 射击(shoot.pas/.c/.cpp) 时间限制:1s,内存限制128MB 题目描述: 据史书记载,对越反击战时期,有位中国侦察兵,他的代号叫814.一天他执行狙击任务,他的任务地区是n座恰巧在一条直线上的山.这些山所在直线恰巧为东西走向,山从东到西依次编号为1~n.一天814隐藏在编号为k的山上,每座山上都有1个目标. 814也非常的厉害,任务结束时杀了很多人,可是史书中只记载了两点: 1:814一定攻