zoukankan      html  css  js  c++  java
  • 2018.8.10模拟赛

    T1
    叕出锅了。。。
    大意:求一个最小的数的阶乘是给定的n个数的乘积的倍数。
    二分边界定小,WA了两个点。二分边界不要省啊。。。多不了多少时间。。。

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    using namespace std;
    const int N=100005;
    int n,a[N],prime[N],jc[N],cnt[N],tot,id[N];
    bool vis[N];
    void p() {
    	for(int i=2;i<=100000;i++) {
    		if(!vis[i]) prime[++tot]=i,id[i]=tot;
    		for(int j=1;j<=tot&&prime[j]*i<=100000;j++) {
    			vis[prime[j]*i]=1;if(i%prime[j]==0) break;
    		}
    	}
    }
    bool ck(int x) {
    	for(int i=1;i<=tot;i++) {
    		if(cnt[i]) {
    			int tmp=0,tp=prime[i];
    			while(x>=tp) {tmp+=x/tp;tp*=prime[i];if(tmp>=cnt[i]) break;}
    			if(tmp<cnt[i]) return 0;
    		}
    	}return 1;
    }
    int main() {
    //	freopen("factorial.in","r",stdin);
    //	freopen("factorial.out","w",stdout);
    	scanf("%d",&n);
    	p();
    	for(int i=1;i<=n;i++) scanf("%d",&a[i]);
    	for(int i=1;i<=n;i++) {
    		for(int j=1;prime[j]<=a[i];j++) {
    			while(a[i]%prime[j]==0) 
    			cnt[j]++,a[i]/=prime[j];
    			if(!vis[a[i]]) cnt[id[a[i]]]++,a[i]/=a[i];
    		}
    	}
    	static int l=1,r=0x7fffffff,ans=0;
    	while(l<=r) {
    		int mid=l+r>>1;
    		if(ck(mid)) ans=mid,r=mid-1;
    		else l=mid+1;
    	}
    	cout<<ans;
    }
    

    T2
    ZZ搜索题,ZZ写错了。。。

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <queue>
    using namespace std;
    queue<int>q;
    int n,m;
    int c[202],g[505][505];
    static char s[505];
    int dis[505][505][5];
    struct Node {int x,y,dir;};
    bool ck(int x,int y) {return (x>0&&x<=n&&y>0&&y<=m&&(g[x][y]!=4||x==n&&y==m));}
    int id(int x,int y,int dir) {return (x-1)*m+y+501*501+dir+1;}
    int main() {
    	scanf("%d%d",&n,&m);
    	c['U']=0,c['D']=1,c['R']=2,c['L']=3,c['S']=4;
    	for(int i=1;i<=n;i++) {
    		scanf("%s",s);
    		for(int j=1;j<=m;j++) 
    			g[i][j]=c[s[j-1]];
    	}
    	memset(dis,0x3f,sizeof dis);
    	queue<Node>q;
    	if(g[1][1]!=2)q.push({1,1,2}),dis[1][1][2]=0;
    	if(g[1][1]!=1)q.push({1,1,1}),dis[1][1][1]=0;
    	while(!q.empty()) {
    		Node u=q.front();q.pop();
    		int i=u.x,j=u.y,x=i,y=j;
    		if(g[i][j]==4) continue;
    		if(g[i][j]!=0&&ck(x-1,y)&&dis[x-1][y][0]>dis[i][j][u.dir]+(u.dir!=0)) dis[x-1][y][0]=dis[i][j][u.dir]+(u.dir!=0),q.push({x-1,y,0});
    		if(g[i][j]!=1&&ck(x+1,y)&&dis[x+1][y][1]>dis[i][j][u.dir]+(u.dir!=1)) dis[x+1][y][1]=dis[i][j][u.dir]+(u.dir!=1),q.push({x+1,y,1});
    		if(g[i][j]!=2&&ck(x,y+1)&&dis[x][y+1][2]>dis[i][j][u.dir]+(u.dir!=2)) dis[x][y+1][2]=dis[i][j][u.dir]+(u.dir!=2),q.push({x,y+1,2});
    		if(g[i][j]!=3&&ck(x,y-1)&&dis[x][y-1][3]>dis[i][j][u.dir]+(u.dir!=3)) dis[x][y-1][3]=dis[i][j][u.dir]+(u.dir!=3),q.push({x,y-1,3}); 
    	}
    	cout<<min(min(dis[n][m][1],dis[n][m][0]),min(dis[n][m][2],dis[n][m][3]));
    }
    
    我是咸鱼。转载博客请征得博主同意Orz
  • 相关阅读:
    NOIP2014-普及组复赛-第二题-比例简化
    NOIP2014-普及组复赛-第一题-珠心算测验
    洛谷-不高兴的津津(升级版)-数组
    洛谷-陶陶摘苹果(升级版)-数组
    洛谷-小鱼比可爱-数组
    小车问题
    洛谷-小鱼的数字游戏-数组
    洛谷-校门外的树-数组
    centos 6.5 minimal 安装及vm-tools安装
    php使用第三方登录
  • 原文地址:https://www.cnblogs.com/sdfzhsz/p/9457113.html
Copyright © 2011-2022 走看看