T1 阶乘

Time Limits: 1000 ms Memory Limits: 262144 KB Detailed Limits

Goto ProblemSet

Description

有n个正整数a[i],设它们乘积为p,你可以给p乘上一个正整数q,使p*q刚好为正整数m的阶乘,求m的最小值。

Input

共两行。

第一行一个正整数n。

第二行n个正整数a[i]。

Output

共一行

一个正整数m。

Sample Input

1

6

Sample Output

3

样例解释:

当p=6,q=1时,p*q=3!

Data Constraint

对于10%的数据,n<=10

对于30%的数据,n<=1000

对于100%的数据,n<=100000,a[i]<=100000

解题思路

可以发现被选出的m的阶乘的每个质因数的个数都一定大于a[i]的乘积,所以可以二分答案,然后判断。

代码

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath> using namespace std;
const int MAXN = 100005;
typedef long long LL; inline int rd(){
int x=0,f=1;char ch=getchar();
while(!isdigit(ch)) {if(ch=='-') f=-1;ch=getchar();}
while(isdigit(ch)) {x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}
return x*f;
} int n,cnt,prime[10000],ans,mx;
LL num[MAXN];
bool vis[MAXN]; inline void solve(int x){
int t=0;
while(++t){
while(x%prime[t]==0){
num[prime[t]]++;
x/=prime[t];mx=max(mx,t);
}
if(x==1) break;
}
} inline bool check(int x){
for(register int i=1;i<=mx;i++){
int now=0;
for(register int j=prime[i];j<=x;j=j*prime[i]) {
now+=x/j;
if(now>=num[prime[i]]) break;
}
if(now<num[prime[i]]) return false;
}return true;
} int main(){
freopen("factorial.in","r",stdin);
freopen("factorial.out","w",stdout);
for(register int i=2;i<=100000;i++){
if(!vis[i]) {prime[++cnt]=i;vis[i]=1;}
for(register int j=1;j<=cnt && (LL)prime[j]*i<=100000;j++) {
vis[i*prime[j]]=1;
if(i%prime[j]==0) break;
}
}
n=rd();
for(register int i=1;i<=n;i++){
int x=rd();
solve(x);
}
int l=1,r=1e9;
while(l<=r){
int mid=l+r>>1;
if(check(mid)){
ans=mid;
r=mid-1;
}else l=mid+1;
}cout<<ans<<endl;
return 0;
}

T2 小S爱跑步

Description

   小S是一个爱锻炼的孩子,他在放假期间坚持在A公园练习跑步。
但不久后,他就开始为在重复的地点练习感到厌烦了,他就打算去B公园跑步。
但是小S由于没有去过B公园,他不知道B公园是否适合练习跑步,又不知道在B公园怎样跑是最优的。所以小S就去B公园进行了一番勘测。
小S在进行了一番勘测后,画出了一张地图,地图每一个位置上都辨识了小S到达该位置后不能往哪一个方位移动。其中有5种表示的符号:“U”代表不能向上移动,“D”代表不能向下移动,“L”代表不能向左移动,“R”代表不能向右移动,如果该位置有障碍物,小S到达那里后无法继续训练,就用“S”来代表。整个公园共有n行m列,小S会从第1行第1列出发,到第n行第m列结束他的练习。
现在小S想要知道,从起点(即第1行第1列)到终点(第n行第m列),途中最少要改变几次方向(即上一次移动的方向和这一次移动的方向不一样)?
注意:小S如在训练途中离开公园(即地图范围),则算是结束训练。

Input

  第1行两个整数n和m,它们的定义请看【题目描述】。
第2~n+1行,每行有m个字符,表示小S的移动方向。

Output

  如果小S从第1行第1列出发无论如何都到达不了第n行第m列,输出“No Solution”,否则输出小S途中最少要改变方向的次数。

Sample Input

3 3

ULL

LDU

SUD

Sample Output

1

【样例解释】

小S先向右移动移动了2格,再向下移动2格,就到达了终点,这样只用改变一次方向。

Data Constraint

【数据范围限制】

10%的数据是题目的馈赠。

30%的数据,1≤n,m≤10。

50%的数据,1≤n,m≤50。

70%的数据,1≤n,m≤250。

100%的数据,1≤n,m≤500.

其中50%的数据是先构造出路径,再构造地图的。

100%数据是随机构造的。

解题思路

直接bfs,模仿spfa的形式。

代码

#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue> using namespace std;
const int MAXN = 505; int n,m,ans[MAXN][MAXN][8];
int xx[5]={0,0,0,1,-1},yy[5]={0,-1,1,0,0};
char c[MAXN][MAXN];
bool vis[MAXN][MAXN][8];
queue<int> Q[4]; inline int pre(char ch){
if(ch=='S') return 0;
if(ch=='L') return 1;
if(ch=='R') return 2;
if(ch=='D') return 3;
return 4;
} int main(){
freopen("run.in","r",stdin);
freopen("run.out","w",stdout);
memset(ans,0x3f,sizeof(ans));
scanf("%d%d",&n,&m);
for(register int i=1;i<=n;i++) scanf("%s",c[i]+1);
Q[1].push(1);Q[2].push(1);Q[3].push(5);vis[1][1][5]=1;ans[1][1][5]=-1;
while(Q[1].size()){
int x=Q[1].front(),y=Q[2].front(),k=Q[3].front();int w=ans[x][y][k];
Q[1].pop();Q[2].pop();Q[3].pop();if(c[x][y]=='S') continue;
for(register int z=1;z<=4;z++){
if(pre(c[x][y])==z) continue;
int ii=xx[z]+x;int jj=yy[z]+y;
if(ii>=1 && ii<=n && jj>=1 && jj<=m)
if(ans[ii][jj][z]>w+(z!=k)){
ans[ii][jj][z]=w+(z!=k);
if(!vis[ii][jj][z]){
Q[1].push(ii);Q[2].push(jj);Q[3].push(z);
vis[ii][jj][z]=1;
}
}
}
vis[x][y][k]=0;
}ans[n][m][1]=min(ans[n][m][1],ans[n][m][0]);
cout<<min(min(min(ans[n][m][1],ans[n][m][2]),ans[n][m][3]),ans[n][m][4]);
return 0;
}

2018.8.10 提高B组模拟赛的更多相关文章

  1. 2018 8.8 提高A组模拟赛

    T1 Description 被污染的灰灰草原上有羊和狼.有N只动物围成一圈,每只动物是羊或狼. 该游戏从其中的一只动物开始,报出[1,K]区间的整数,若上一只动物报出的数是x,下一只动物可以报[x+ ...

  2. JZOJ5804. 【2018.08.12提高A组模拟】简单的序列

    性质:每个位置的前缀和必须大于0,总和=0.以此dp即可. #include <iostream> #include <cstdio> #include <cstring ...

  3. NOIP2017提高组模拟赛 10 (总结)

    NOIP2017提高组模拟赛 10 (总结) 第一题 机密信息 FJ有个很奇怪的习惯,他把他所有的机密信息都存放在一个叫机密盘的磁盘分区里,然而这个机密盘中却没有一个文件,那他是怎么存放信息呢?聪明的 ...

  4. JZOJ 5818. 【NOIP提高A组模拟2018.8.15】 做运动

    5818. [NOIP提高A组模拟2018.8.15] 做运动 (File IO): input:running.in output:running.out Time Limits: 2000 ms  ...

  5. JZOJ 5812. 【NOIP提高A组模拟2018.8.14】 区间

    5812. [NOIP提高A组模拟2018.8.14] 区间 (File IO): input:range.in output:range.out Time Limits: 1000 ms  Memo ...

  6. ZROI提高组模拟赛05总结

    ZROI提高组模拟赛05总结 感觉是目前为止最简单的模拟赛了吧 但是依旧不尽人意... T1 有一半的人在30min前就A掉了 而我花了1h11min 就是一个简单的背包,我硬是转化了模型想了好久,生 ...

  7. NOIP2017提高组 模拟赛15(总结)

    NOIP2017提高组 模拟赛15(总结) 第一题 讨厌整除的小明 [题目描述] 小明作为一个数学迷,总会出于数字的一些性质喜欢上某个数字,然而当他喜欢数字k的时候,却十分讨厌那些能够整除k而比k小的 ...

  8. NOIP2017提高组 模拟赛13(总结)

    NOIP2017提高组 模拟赛13(总结) 第一题 函数 [题目描述] [输入格式] 三个整数. 1≤t<10^9+7,2≤l≤r≤5*10^6 [输出格式] 一个整数. [输出样例] 2 2 ...

  9. NOIP2017提高组模拟赛 9 (总结)

    NOIP2017提高组模拟赛 9 (总结) 第一题 星星 天空中有N(1≤N≤400)颗星,每颗星有一个唯一的坐标(x,y),(1≤x,y ≤N).请计算可以覆盖至少K(1≤K≤N)颗星的矩形的最小面 ...

随机推荐

  1. PHP实现图片的汉明码提取与降维

    作者感言:数学不好,遇到算法问题分分钟狗带,毫无转寰的余地-_-||| 最近心血来潮,看了相似图片的搜索,最最最初级的方法即提取汉明码,之后匹配汉明距离.当然,在数以亿计的汉明码中,要筛出需要的图片, ...

  2. HDU 1069 Monkey and Banana (动态规划)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1069 简单记录一下 思路:把长方体的各种摆法都存到数组里面,然后按照长宽排序,再dp即可 转移方程 d ...

  3. PAT甲级——A1087 All Roads Lead to Rome【30】

    Indeed there are many different tourist routes from our city to Rome. You are supposed to find your ...

  4. mysql 乐观判断 校验

    说下场景, 用户账户 有 100 元钱,  他执行了两个操作,  A操作发红包发了80块钱, B操作 发红包 发了 70 ,并发, 假如没有 冻结这一说法,  两个操作都是去 查询余额, 还有100 ...

  5. <scrapy爬虫>爬取校花信息及图片

    1.创建scrapy项目 dos窗口输入: scrapy startproject xiaohuar cd xiaohuar 2.编写item.py文件(相当于编写模板,需要爬取的数据在这里定义) # ...

  6. 通过实体类生成建表SQL语句实现方法

    import java.io.File; import java.io.FileOutputStream; import java.lang.reflect.Field; import java.ut ...

  7. angular 基本树结构

    HTML: http://www.ngnice.com/showcase/#/tree/basic <link rel="stylesheet" href="vie ...

  8. [Cqoi2015] 编号 【逆向思维,暴力枚举】

    Online Judge:Luogu-P4222 Label:逆向思维,暴力枚举 题目描述 你需要给一批商品编号,其中每个编号都是一个7位16进制数(由0~9, a-f组成).为了防止在人工处理时不小 ...

  9. BZOJ4383/LuoGuP3588 Pustynia/PUS 线段树建图优化

    我会告诉你我看了很久很久才把题目看懂吗???怀疑智商了 原来他给的l,r还有k个数字都是下标... 比如给了一个样例 l, r, k, x1,x2,x3...xk,代表的是一个数组num[l]~num ...

  10. Leetcode60. Permutation Sequence第k个排列

    给出集合 [1,2,3,-,n],其所有元素共有 n! 种排列. 按大小顺序列出所有排列情况,并一一标记,当 n = 3 时, 所有排列如下: "123" "132&qu ...