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. 20155223 Exp2 后门原理与实践

    20155223 Exp2 后门原理与实践 实验预热 一.windows获取Linux shell Windows:使用 ipconfig 命令查看当前机器IP地址. 进入ncat所在文件地址,输入命 ...

  2. mfc CFileDialog类

    知识点: CFileDialog类 SetBitmap LoadImage 动态显示图片 一.CFileDialog类 构造函数 CFileDialog( BOOL bOpenFileDialog, ...

  3. 51nod 小朋友的笑话

    链接 分析: 每次操作把以前没有出现这个数的设为1,有这个数的设为0.首先将当前区间设为1,考虑有set维护这个颜色出现的区间,然后把所有与当前区间相交的拿出来,修改为0. 复杂度?每次操作的线段只会 ...

  4. Js_封装JQ库为插件

    //在jQuery匿名函数中,采用jQuery.extend();方法创建jQuery插件 //在jQuery匿名函数中, 采用对象.属性 = 函数的方式创建jQuery插件 (function ($ ...

  5. Jq_SetTimeOut

    倒计时 59 秒: var t function timedCount() { document.getElementById('txt').value=c ){ c--; }else{ clearT ...

  6. Web项目开发流程 PC端

      一.了解.明确需求. 这个应该是第一步了,不了解需求你就不知道为什么要做,要怎么去做这个项目的工作. (1)明确需求是相当重要的,很有必要去和产品经理.设计人员去沟通,需要明白每一个按钮,每一个开 ...

  7. LeetCode-51.N皇后

    n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击. 上图为 8 皇后问题的一种解法. 给定一个整数 n,返回所有不同的 n 皇后问题的解决方案. 每一种解 ...

  8. Python与rrdtool的结合模块

    rrdtool(round robin database)工具为环状数据库的存储格式,round robin是一种处理定量数据以及当前元素指针的技术.rrdtool主要用来跟踪对象的变化情况,生成这些 ...

  9. 评审other's意见

    评审意见 1.组 a.界面不友好 b.没连数据库 2.组 a.没连数据库 b.无智能匹配当前时间 3.组 a.基本功能实现 b.界面未优化 4.组 ourselves 5.组 a.各反面较为完善 6. ...

  10. GITHUB使用及入门总结

    这是我第一次应用git,以下仅供git的初学者参考.     github是一个基于git的代码托管平台,付费用户可以建私人仓库,我们一般的免费用户只能使用公共仓库,也就是代码要公开.这对于一般人来说 ...