您的位置:首页 > 其它

[TJOI2016&HEOI2016]

2016-05-26 19:02 417 查看

很有意思。是因为排序那道题才听闻今年tjoi2016的。

题是好题!先把它刷完再去把zhihu look through一遍。

bzoj4552

以后看到什么做不出的题,看看能否写二分!!!!写二分!!!!写二分!!!!!!!!

二分答案,大于mid的取一,否则为0,写的时候注意了一些细节,所以效率比较高。

二分的时候边界少打了个等于,下次要注意回来看边界!

膜鏼添动力--

#include<cstdio>
#include<cstring>
#include<algorithm>
#define N 10000
using namespace std;
char st[55][55];
int edgenum,n,ans,m,x[55][55],y[55][55],next
,vet
,head
,flag
,match
;
void add(int u,int v)
{
edgenum++;vet[edgenum]=v;next[edgenum]=head[u];head[u]=edgenum;
//printf("%d %d\n",u,v);
}
int dfs(int u)
{
int e=head[u];flag[u]=1;
while(e>0)
{
int v=vet[e];
if(match[v]==0||(flag[match[v]]==0&&dfs(match[v])==1))
{
match[v]=u;
return 1;
}
e=next[e];
}return 0;
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
{
scanf("%s",st[i]+1);
}
int A=1,B=1;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
if(st[i][j]=='#')A++;x[i][j]=A;
}A++;
}
for(int j=1;j<=m;j++)
{
for(int i=1;i<=n;i++)
{
if(st[i][j]=='#')B++;y[i][j]=B;
}B++;
}
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
if(st[i][j]=='*')
{
int u=x[i][j],v=y[i][j];add(u,v);
}
for(int i=1;i<=A;i++)
{
memset(flag,0,sizeof(flag));
ans+=dfs(i);
}
printf("%d",ans);
}
View Code

 【bzoj4555】

NTT %%%NiroBC

感觉这辈子都不用做这道题了。。。

【Bzoj4556】

SAM..........orz

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: