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. redis系列--深入哨兵集群

    一.前言 在之前的系列文章中介绍了redis的入门.持久化以及复制功能,如果不了解请移步至redis系列进行阅读,当然我也是抱着学习的知识分享,如果有什么问题欢迎指正,也欢迎大家转载.而本次将介绍哨兵 ...

  2. 20155311《网络对抗》MSF基础应用

    20155311<网络对抗>MSF基础应用 实验过程 实验系统 靶机1:Windows XP Professional SP2 ,IP地址:192.168.136.129 靶机2:Wind ...

  3. WPF编程,通过DoubleAnimation控制图片的透明度,将重叠的图片依次显示。

    原文:WPF编程,通过DoubleAnimation控制图片的透明度,将重叠的图片依次显示. 版权声明:我不生产代码,我只是代码的搬运工. https://blog.csdn.net/qq_43307 ...

  4. C语言与数据库操作入门(Win版)

    C语言与数据库操作入门(Win版) 2017年12月10日 17:30:17 阅读数:1387 数据库,DataBase,学C语言的是不是想说,很想爱她却并不容易呢?不用着急,C语言也可以操作数据库的 ...

  5. 【转载】SSD断电保护原理

    异常掉电的隐患 若没有合理的掉电保护机制,而异常掉电的发生又不可避免,当发生异常掉电,会引发很多问题. (1)丢盘 异常掉电,会使得映射表来不及保存,丢失逻辑地址到物理地址的映射,待重新上电后,SSD ...

  6. WEB返回顶部效果

    1. PC端页面返回顶部效果 1 $( window ).scroll(function(){ 2 if( $( window ).scrollTop() > 500 ){ // 当顶部的滚动距 ...

  7. python中类中属性和方法的具体定义方法和使用

    1. Python中类中特性分成属性和方法 属性和方法都分为私有和公有的,私有的只可以在本类中使用外部是无法访问的 2. 定义属性(成员变量)的语法格式(公有属性/私有属性) class 类名: de ...

  8. 用信鸽来讲解HTTPS的知识

    加密是一个很难理解的东西,这里头满是数学证明.不过,除非你是在开发一个加密系统,否则无需了解那些高阶的复杂知识. 如果你看这篇文章是为了创造下一个 HTTPS 协议,很抱歉,请出门左走,鸽子是远远不够 ...

  9. arduino按钮使用的两个小实验

    一:按钮控制一个灯                                                                                            ...

  10. hadoop-lzo 安装配置

           在hive中要想使用lzo的格式,需要配置安装好lzo工具并且在hadoop的core-site.xml与mapred-site.xml中配置相应的配置 一.编译安装lzo与lzop 在 ...