HGOI 20181028(复赛备考)

/*
真是暴力的一天,最后一题MLE?由于数组开得太大了!!!
270滚粗
考场上好像智商高了很多?!(假的)
*/

sol:暴力求解,然后没有数据范围吐槽一下(我开了10000000)

code:(100pts)

# include <bits/stdc++.h>
using namespace std;
const int MAXN=1e7+;
char s[MAXN];
int fun(char c)
{
if (c=='W') return ;if (c=='H') return ;if (c=='Q') return ;
if (c=='E') return ; if (c=='S') return ; if (c=='T') return ;
if (c=='X') return ;
}
bool check(int l,int r)
{
int ret=;
for (int i=l;i<=r;i++) ret+=fun(s[i]);
if (ret==) return true;
else return false;
}
int main()
{
freopen("jingle.in","r",stdin);
freopen("jingle.out","w",stdout);
cin>>s; int len=strlen(s);
int cnt=; for (int i=;i<len;i++) if (s[i]=='/') cnt++;
cnt--;
int l=,r,now=;
int ans=;
while(true) {
for (r=l+;r<=len;r++) if (s[r]=='/') break; r--;
if (check(l,r)) ans++;
l=r+;
if (now==cnt) break;
now++;
}
printf("%d\n",ans);
return ;
}

其实看一下就可以发现奇环显然是不行的。偶环一定可以通过0和1求解,然后就想到二分图

显然,如果这是张二分图那么就Yes采取01染色法求解(dfs暴力O(n)),如果不能做到01染色那么就输出No

但是注意图并不一定是连通图所以要多遍dfs

code(100pts)——第一次在考场上写read和write很激动然后封装了Input Output Base System的struct!码风很奇怪。。。

# include <bits/stdc++.h>
# define Rint register int
using namespace std;
const int MAXN=,MAXM=*;
int head[MAXN],col[MAXN],tot=,n,m;
bool vis[MAXN],ff;
struct rec{ int pre,to;}a[MAXM];
struct IOBS{
inline int read()
{
int X=,w=; char c=;
while (!(c>=''&&c<='')) { w|=c=='-';c=getchar();}
while (c>=''&&c<='') { X=(X<<)+(X<<)+(c^); c=getchar();}
return w?-X:X;
}
inline void write(Rint x)
{
if (x<) { x=-x; putchar('-');}
if (x>) write(x/);
putchar(x%+'');
}
inline void write_files(Rint x,char cc){ write(x); putchar(cc);}
inline void Files() { freopen("perfect.in","r",stdin); freopen("perfect.out","w",stdout);}
}IO;
inline void adde(Rint u,Rint v)
{
a[++tot].pre=head[u];
a[tot].to=v;
head[u]=tot;
}
inline void dfs(Rint u,Rint c)
{
vis[u]=true; col[u]=c;
for (Rint i=head[u];i;i=a[i].pre){
int v=a[i].to;
if (vis[v]&&col[v]!=(!c)) { ff=false; return;}
if (vis[v]&&col[v]==(!c)) continue;
dfs(v,!c);
}
}
int main()
{
IO.Files(); n=IO.read(); m=IO.read();
int u,v;
for (Rint i=;i<=m;i++) {
u=IO.read();v=IO.read();
adde(u,v); adde(v,u);
}
memset(vis,false,sizeof(vis));
for (Rint i=;i<=n;i++) {
if (vis[i]) continue;
ff=true; dfs(i,);
if (ff==false) { printf("NO\n"); return ;}
}
putchar('Y');putchar('E');putchar('S');putchar('\n');
for (Rint i=;i<=n;i++)
if (i!=n) IO.write_files(col[i],' ');
else IO.write(col[i]);
putchar('\n');
return ;
}

sol: 通过n,m<=5发现是暴力题然后算了下裸bfs暴力会TLE但是还是打了23333!

我可是码过斗地主、德州扑克的人!其实这点码量差不多就是100行左右吧

不大不大 bfs套bfs! (注意Mle!)

# include <bits/stdc++.h>
# define Rint register int
using namespace std;
const int MAXN=;
const int dx[]={,-,,,};
const int dy[]={,,,,-};
struct node{ int M[MAXN][MAXN],L,scr;};
struct rec{ int x,y,step;};
char s[MAXN];
int mp[MAXN][MAXN],start[MAXN][MAXN],n,m;
bool inq[MAXN][MAXN];
queue<rec>Q;
inline bool check(Rint X1,Rint Y1,Rint X2,Rint Y2,int &d)
{
while(!Q.empty()) Q.pop();
memset(inq,false,sizeof(inq));
inq[X1][Y1]=true; rec st; st.step=; st.x=X1; st.y=Y1;
Q.push(st);
while (!Q.empty()) {
rec u=Q.front();Q.pop();
for (int i=;i<=;i++) {
rec v;
v.x=u.x+dx[i]; v.y=u.y+dy[i]; v.step=u.step+;
if (v.x==X2&&v.y==Y2) { d=v.step-; return true;}
if (v.x>n||v.x<|v.y>m||v.y<||inq[v.x][v.y]||mp[v.x][v.y]!=) continue;
if (v.x==X2&&v.y==Y2) { d=v.step-; return true;}
Q.push(v); inq[v.x][v.y]=true;
}
}
return false;
}
queue<node>q;
inline void bfs()
{
node st; memcpy(st.M,start,sizeof(start));
st.L=; st.scr=;
int ans_scr=,ans_L=0x7f7f7f7f;
q.push(st);
while (!q.empty()) {
node u=q.front();q.pop();
for (Rint X1=;X1<=n;X1++)
for (Rint Y1=;Y1<=m;Y1++) {
if (u.M[X1][Y1]==-||u.M[X1][Y1]==) continue;
for (Rint X2=;X2<=n;X2++)
for (Rint Y2=;Y2<=m;Y2++) {
if (X1==X2&&Y1==Y2) continue;
if (u.M[X2][Y2]==-||u.M[X2][Y2]==) continue;
if (u.M[X1][Y1]!=u.M[X2][Y2]) continue;
int delt_L; memcpy(mp,u.M,sizeof(u.M));
if (check(X1,Y1,X2,Y2,delt_L)) {
node v=u; memcpy(v.M,u.M,sizeof(u.M));
v.L=u.L+delt_L; v.scr=u.scr+;
v.M[X1][Y1]=v.M[X2][Y2]=;
if (v.scr>ans_scr) { ans_scr=v.scr; ans_L=v.L; }
else if (v.scr==ans_scr&&v.L<ans_L) ans_L=v.L;
q.push(v);
}
}
}
}
if (ans_scr==) printf("0 0\n");
else printf("%d %d\n",ans_scr,ans_L);
}
int main()
{
scanf("%d%d",&n,&m);
for (Rint i=;i<=n;i++) {
cin>>s;
for (Rint j=;j<m;j++)
if (s[j]>=''&&s[j]<='') start[i][j+]=s[j]-'';
else if (s[j]=='X') start[i][j+]=-;
}
bfs();
return ;
}

HGOI 20181028 题解的更多相关文章

  1. HGOI 20190310 题解

    /* 又是又双叒叕WA的一天... 我太弱鸡了... 今天上午打了4道CF */ Problem 1 meaning 给出q组询问,求下列函数的值$ f(a) = \max\limits_{0 < ...

  2. HGOI 20190303 题解

    /* 记一串数字真难. 5435 今天比赛又是hjcAK的一天. 今天开题顺序是312,在搞T1之前搞了T3 昨天某谷月赛真是毒瘤. 但是讲评的同学不错,起码T4看懂了... 构造最优状态然后DP的思 ...

  3. HGOI 20180224 题解

    /* The Most Important Things: ljc chat with fyh on QQTa说期末考Ta数学74分感觉不好但是我觉得fyh是地表最强的鸭~~(of course en ...

  4. HGOI 20190218 题解

    /* 又是AK局... hjc又双叒叕AK了... Hmmm...我侥幸 */ Problem A card 给出无序序列a[]可以选择一个数插入到合适的位置作为一次操作,至少多少次操作后可以把序列变 ...

  5. HGOI 20190217 题解

    /* for me,开训第一天 /beacuse 文化课太差被抓去补文化课了... 看一眼题 : AK局? 但是,Wa on test #10 in problem C 290! (就差那么一咪咪) ...

  6. HGOI 20181103 题解

    problem:把一个可重集分成两个互异的不为空集合,两个集合里面的数相乘的gcd为1(将集合中所有元素的质因数没有交集) solution:显然本题并不是那么容易啊!考场上想了好久.. 其实转化为上 ...

  7. HGOI 20181101题解

    /* 又是爆0的一天(不知道今年高考难不难,反正今天(信息学)真的难!) */ solution:对于两个数相加,有一个显然的结论就是要么不进位(相对于位数大的),要么(进最多一位) 然后对于整个数组 ...

  8. HGOI 20191108 题解

    Problem A 新婚快乐 一条路,被$n$个红绿灯划分成$n+1$段,从前到后一次给出每一段的长度$l_i$,每走$1$的长度需要$1$分钟. 一开始所有红绿灯都是绿色的,$g$分钟后所有红绿灯变 ...

  9. HGOI 20191107 题解

    Problem A 树状数组 给出下列$C++$代码: 设区间加操作$modify(l,r)$为调用两次$update(r,1)$和$update(l-1,-1)$ 设$f(l,r)$表示在初始$cn ...

随机推荐

  1. 从源代码解释Android事件分发机制

    在ViewRootImpl的setView方法中.用户的触摸按键消息是体如今窗体上的.而windowManagerService则是管理这些窗体,它一旦接收到用户对窗体的一些触摸按键消息,会进行对应的 ...

  2. 安装Docker的三种方式

    本人在安装docker时之前一直采用的是系统自带的docker软件包安装,导致下载的docker不是最新版本,因此会有很多docker命令无法使用,例如network等等,现将安装docker的方式总 ...

  3. Ubuntu14.04配置gcc4.4.4+Qt4.8.4交叉编译环境

    安装32位程序运行支持 sudo apt-get install lib32stdc++6 lib32z1 lib32ncurses5 lib32bz2-1.0 可能报错: lib32stdc++6 ...

  4. 如何控制iOS的导航栏和状态栏的样式

    这是一个很常用的开发场景,就是改变导航栏上的文字颜色与背景色,如果你曾有 windows form 开发经验一定会笑我:"卧槽,这有什么好写的,不就是设置两个属性就可以了吗?" 我 ...

  5. Spring+SpringMVC+MyBatis整合基础篇(三)搭建步骤

    作者:13GitHub:https://github.com/ZHENFENG13版权声明:本文为原创文章,未经允许不得转载. 框架介绍 Spring SpringMVC MyBatis easyUI ...

  6. 【2017年9月10日更新】ABP配套代码生成器(ABP Code Generator)帮助文档,实现快速开发

    ABP代码生成器介绍 ABP Code Generator 针对abp这个框架做了一个代码生成器,功能强大.分为两大功能点,一个是数据层,一个是视图层. 数据服务层:通过它,可以实现表设计.领域层初始 ...

  7. MVC的多页面后台管理系统

    MVC的多页面后台管理系统 同样功能的后台管理系统,也是可以使用 ASP.NET MVC .Web API 和JQuery 来制作. 所有的功能都与Angular js的单页面相同.应用层所有的方法都 ...

  8. 如何使用SVN

    如何正确高效地管理软件的版本是一件让人头疼的事情,使用SVN是一个不错的选择.下面简要介绍SVN在windows xp和redhat两种平台下的使用.SVN软件包括服务器端和客户端程序. 1.如何在W ...

  9. STM32下载Bin文件的几种方式

    一.STM32 ST-LINK Utility 1.下载安装软件 官网下载地址:http://www.st.com/zh/development-tools/stsw-link004.html 百度网 ...

  10. Unity XLua 官方教程学习

    一.Lua 文件加载 1. 执行字符串 using UnityEngine; using XLua; public class ByString : MonoBehaviour { LuaEnv lu ...