zoukankan      html  css  js  c++  java
  • Codeforces1335F Robots on a Grid

    蒟蒻怕是颓了 (std)

    Description

    link

    题意:给一个矩阵,上面有(ULRD)四种指向

    同时这个矩阵的每个元素还有黑或白两种属性

    在该格中则下一秒就到了指向的那个格子

    现在在矩阵中放机器人,如果两个机器人在若干秒后相撞了,则该摆放不合法

    求最大合法摆放个数和以之为前提最多有多少黑格

    Solution

    考场想到了二分图……显而易见地不入流

    我们发现机器人的走法可能构成了一个环,长度(le n imes m)

    如果两个机器人在某个时候相遇了,那么它们会接着同步走

    考虑到环长,所以如果两个机器人会相遇,那么在(n imes m) 步后会在一个格子上面

    我们用倍增实现求从 ((i,j)) 开始 (n imes m) 步会到达的位置即可

    最后用桶一下就可以了

    最后,这个题坑点还有清空数组,桶需要在求完了就即时清空

    Code

    #include<bits/stdc++.h>
    using namespace std;
    #define int long long
    namespace yspm{
    	inline int read()
    	{
    		int res=0,f=1; char k;
    		while(!isdigit(k=getchar())) if(k=='-') f=-1;
    		while(isdigit(k)) res=res*10+k-'0',k=getchar();
    		return res*f;
    	}
    	const int N=1e6+10;
    	int b[N],w[N],col[N]; char s[N];
    	int nxt[24][N],n,m;
    	inline int id(int x,int y)
    	{
    		return m*(x-1)+y;
    	}
    	inline void work()
    	{
    		n=read(); m=read(); 
    		for(int i=1;i<=n;++i) 
    		{
    			scanf("%s",s+1);
    			for(int j=1;j<=m;++j) col[id(i,j)]=s[j]-'0';
    		}
    		for(int i=1;i<=n;++i)
    		{
    			scanf("%s",s+1);
    			for(int j=1;j<=m;++j)
    			{
    				int now=id(i,j);
    				if(s[j]=='U') nxt[0][now]=now-m;
    				else if(s[j]=='D') nxt[0][now]=now+m;
    				else if(s[j]=='L') nxt[0][now]=now-1;
    				else nxt[0][now]=now+1;
    			}
    		} 
    		n*=m;
    		for(int i=1;i<=20;++i) for(int j=1;j<=n;++j) nxt[i][j]=nxt[i-1][nxt[i-1][j]];
    		for(int j=1;j<=n;++j) 
    		{
    			int to=j;
    			for(int i=20;i>=0;--i) if((1<<i)&n) to=nxt[i][to];
    			if(col[j]) w[to]=1; else b[to]=1;
    		}
    		int ans=0,maxx=0;
    		for(int i=1;i<=n;++i)
    		{
    			if(b[i]) ans++,maxx++,b[i]=w[i]=0;
    			else if(w[i]) ans++,b[i]=w[i]=0; 
    		}printf("%lld %lld
    ",ans,maxx);
    		return ;
    	}
    	signed main()
    	{
    		int T=read(); while(T--) work();
    		return 0;
    	}
    }
    signed main(){return yspm::main();}
    
  • 相关阅读:
    设置元素等待.py
    javaWeb服务详解(含源代码,测试通过,注释)
    com.sun.istack.SAXException2: 在对象图中检测到循环。这将产生无限深的 XML
    com.sun.istack.SAXException2: 在对象图中检测到循环。这将产生无限深的 XML
    No services have been found解决方案
    No services have been found解决方案
    JavaMail给QQ邮箱发邮件报错,没有SSL加密
    JavaMail给QQ邮箱发邮件报错,没有SSL加密
    JavaMail给QQ邮箱发邮件报错
    JavaMail给QQ邮箱发邮件报错
  • 原文地址:https://www.cnblogs.com/yspm/p/12703161.html
Copyright © 2011-2022 走看看