HGOI 20181028 题解
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 题解的更多相关文章
- HGOI 20190310 题解
/* 又是又双叒叕WA的一天... 我太弱鸡了... 今天上午打了4道CF */ Problem 1 meaning 给出q组询问,求下列函数的值$ f(a) = \max\limits_{0 < ...
- HGOI 20190303 题解
/* 记一串数字真难. 5435 今天比赛又是hjcAK的一天. 今天开题顺序是312,在搞T1之前搞了T3 昨天某谷月赛真是毒瘤. 但是讲评的同学不错,起码T4看懂了... 构造最优状态然后DP的思 ...
- HGOI 20180224 题解
/* The Most Important Things: ljc chat with fyh on QQTa说期末考Ta数学74分感觉不好但是我觉得fyh是地表最强的鸭~~(of course en ...
- HGOI 20190218 题解
/* 又是AK局... hjc又双叒叕AK了... Hmmm...我侥幸 */ Problem A card 给出无序序列a[]可以选择一个数插入到合适的位置作为一次操作,至少多少次操作后可以把序列变 ...
- HGOI 20190217 题解
/* for me,开训第一天 /beacuse 文化课太差被抓去补文化课了... 看一眼题 : AK局? 但是,Wa on test #10 in problem C 290! (就差那么一咪咪) ...
- HGOI 20181103 题解
problem:把一个可重集分成两个互异的不为空集合,两个集合里面的数相乘的gcd为1(将集合中所有元素的质因数没有交集) solution:显然本题并不是那么容易啊!考场上想了好久.. 其实转化为上 ...
- HGOI 20181101题解
/* 又是爆0的一天(不知道今年高考难不难,反正今天(信息学)真的难!) */ solution:对于两个数相加,有一个显然的结论就是要么不进位(相对于位数大的),要么(进最多一位) 然后对于整个数组 ...
- HGOI 20191108 题解
Problem A 新婚快乐 一条路,被$n$个红绿灯划分成$n+1$段,从前到后一次给出每一段的长度$l_i$,每走$1$的长度需要$1$分钟. 一开始所有红绿灯都是绿色的,$g$分钟后所有红绿灯变 ...
- HGOI 20191107 题解
Problem A 树状数组 给出下列$C++$代码: 设区间加操作$modify(l,r)$为调用两次$update(r,1)$和$update(l-1,-1)$ 设$f(l,r)$表示在初始$cn ...
随机推荐
- mysql图形化界面MySQL_Workbench
1,下载最新版本的MySQL Workbench,下载地址: http://www.mysql.com/downloads/workbench/ 2,安装Workbench的依赖组件两个 http ...
- 跟我学Android NDK开发(一)
Android NDK 开发跟其它开发一样,首先需要配置好开发环境,本文以 Ubuntu系统为例介绍如何进行 Android NDK 开发环境的配置. 1. 简介 什么是 Android NDK 呢? ...
- POJ2274
这真的是一道数据结构的好题. 题意是在一条直线上有n辆车,每辆车有一个初始位置x[i]和速度v[i],问最终(在无限时间后)一共会发生多少次超车事件(mod 1000000),以及输出这些事件(如果大 ...
- STM32---定时器的ETR功能
定时器的ETR功能 在使用定时器的时候,在引脚复用功能中看到了TIM2_CH1_ETR,这个ETR是什么意思呢? 答:TIM2_CH1_ETR表示两个功能选一个,分别是TIM2_CH1和TIM2_ET ...
- 05-python基础
1.python是什么? 解释性语言.高级语言.开源.简洁.方便.容易扩展 2.可变类型与不可变类型 可变类型:list.dict.可变集合set 不可变类型:数字,str,tuple元组,froze ...
- 修改 input[type="radio"] 和 input[type="checkbox"] 的默认样式
表单中,经常会使用到单选按钮和复选框,但是,input[type="radio"] 和 input[type="checkbox"] 的默认样式在不同的浏览器或 ...
- Zabbix实战-简易教程--大型分布式监控系统实现Agent批量快速接入
一.分布式架构 相信使用zabbix的大神都熟悉他的分布式架构,分布式的优势相当明显,分而治之.比如目前我的架构图如下: 那么,对将要接入监控系统的任何一个agent如何快速定位,并进行接入呢? 问 ...
- ANSYS渡槽槽身动水压力的施加(2)——U型渡槽
U型渡槽动水压力荷载施加命令及说明 程序中需要用到ANSYS重启动,因为需提取前一步加速度结果以施加部分动水压力: 默认Y方向为重力方向,X方向为横槽向,Z方向为纵槽向: 需准备地震波文件: 需先将槽 ...
- SVN回退版本
执行svn up 命令 保证当前本地版本是最新的版本. svn up 执行svn log 命令,查看历史修改,确定需要回复的版本,如果想要对比2个不同版本的文件差异 可以使用命令 svn diff - ...
- CMS漏洞检测工具 – CMSmap
CMSmap是一个Python编写的针对开源CMS(内容管理系统)的安全扫描器,它可以自动检测当前国外最流行的CMS的安全漏洞. CMSmap主要是在一个单一的工具集合了不同类型的CMS的常见的漏洞. ...