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. 20155237 《JAVA程序设计》实验三(敏捷开发与XP实践)实验报告

    20155237 <JAVA程序设计>实验三(敏捷开发与XP实践)实验报告 实验内容 敏捷开发与XP实践 XP基础 XP核心实践 相关工具 实验要求 1.没有Linux基础的同学建议先学习 ...

  2. 实验的方差分析(R语言)

    实验设计与数据处理(大数据分析B中也用到F分布,故总结一下,加深印象)第3课小结--实验的方差分析(one-way analysis of variance) 概述 实验结果\(S\)受多个因素\(A ...

  3. mfc CProgressCtrl

    CProgressCtrl常用属性 CProgressCtrl类常用成员函数 CProgressCtrl代码示例 一.CProgressCtrl控件属性 当我们在处理大程序时,常常需要耗很长时间(比如 ...

  4. python基础学习1-流程控制和判断

    python for循环和 if流程控制用法 Ages=22 for i in range(10): inputAges = int(input("输入年龄")) if input ...

  5. sql——inner join,where,left join的区别

    1.select a.name,a.sex,a.subject,a.age from TableA a, TableB b where a.name = b.name 2.select a.name, ...

  6. 使用 restTemplate 实现get/post 请求

    get 请求(这里是在 idea 的 test包中,所以需要直接 new RestTemplate() ) 即:RestTemplate restTemplate = new RestTemplate ...

  7. Flask学习-Flask基础之WSGI

    一.WSGI为什么会出现? 在学习一个东西之前,我们肯定想知道:它为什么会出现?那么,WSGI为什么会出现呢? 我们知道,部署一个web应用,经常需要使用nginx.apache或者IIS等web服务 ...

  8. 阿里云ECS 固定带宽变为按量付费的方式

    阿里云ECS 固定带宽变为按量付费的方式 阿里云控制台 2.升降配置-降低配置-降低至最低配置 3.为按量带宽设置一个峰值,例如100M. 4.过几分钟,就自动变为按量付费的带宽了.

  9. Unity Dotween官方案例学习

    本文只涉及一些案例,具体查看 DoTween 官方文档. 一. Basics public class Basics : MonoBehaviour { public Transform redCub ...

  10. C++基础知识(2)

    作为接口的函数头 C++函数可被其他函数激活或调用,函数头描述了函数与调用它的函数之间的接口. 在C语言中,省略返回类型相当于说函数的类型为int,然而,C++逐步淘汰了这种用法 也可以使用下面的变体 ...