BZOJ3125: CITY
发布日期:2021-05-06 03:50:36 浏览次数:28 分类:精选文章

本文共 1649 字,大约阅读时间需要 5 分钟。

心累..上次的板子是错的

今天被折腾死了….
貌似比标算多了一两个log?
反正预处理可以去掉 反正A了..我就懒得去改了

#include
#include
#include
using namespace std; #define ll long longchar c;bool glag;inline void read(int &a){ a=0;do c=getchar();while(c!='-'&&(c<'0'||c>'9')); if(c=='-')glag=true,c=getchar(); while(c<='9'&&c>='0')a=(a<<3)+(a<<1)+c-'0',c=getchar(); if(glag)glag=false,a=-a;}int n,m;const int INF=1<<29;ll f[2][4594324];bool us[16][16];int Div[16];int getpc(int x,int pos){ return (x/Div[pos])%3;} int pc(int pos,int op){ return op*Div[pos];}int get1(int x,int pos,int cnt){ int l=x%Div[pos]; if(!l)return -1; while(pos&&(cnt||(l%Div[pos+1])/Div[pos]!=2)) { if((l%Div[pos+1])/Div[pos]==2)cnt--; if((l%Div[pos+1])/Div[pos]==1)cnt++; if(cnt>0)return -1; pos--; } if(pos<1)return -1; return l%Div[pos+1]/Div[pos]!=2?-1:pos;}int get2(int x,int pos,int cnt){ int l=x/Div[cnt?++pos:pos]; if(!l)return -1; while((cnt||l%3!=1)&&pos<=m) { if(l%3==1) cnt--; else if(l%3==2)cnt++; if(cnt>0)return -1; l/=3,pos++; } if(pos+1>m) return -1; return l%3!=1?-1:pos;}int flag[16][16],flag2[16][16];int main(){ int i,j,t; read(n),read(m); Div[0]=1; for(int i=1;i<=15;i++) Div[i]=Div[i-1]*3; for(i=1;i<=n;i++) for(j=1;j<=m;j++) { do c=getchar();while(c!='.'&&c!='#'&&c!='|'&&c!='-'); if(c=='.')flag2[i][j]=1; else if(c=='#')flag2[i][j]=0; else if(c=='|')flag2[i][j]=2; else flag2[i][j]=3; } if(n
上一篇:BZOJ3034: Heaven Cow与God Bull
下一篇:BZOJ1187: [HNOI2007]神奇游乐园

发表评论

最新留言

网站不错 人气很旺了 加油
[***.192.178.218]2025年04月29日 18时23分02秒