今天早上听说不放假感觉很sad,又听说要考试感觉更sad了,早读的时候Juan_feng表示即使考也不会考虫食算,结果上午并没有考试,就自己做了几道题。不得不说做题的决定实在是太明智了,做NOIP历年真题,发现蓝题及以下的搜索题所剩不多,就做了一道引水入城(更巧的是今天洛谷的智推给我推了这个题),感觉思路很妙,唯一有一点不足就是90改到100的过程中只是机械的搬了题解的思路,并没有明白两种写法的区别。
下午听说要放假,感觉非常开心,结果loli过来找我们说要考试...这就很sad了。点开题目文件一看,感到非常震惊。T1是英文题面,T2是...虫食算!T3是...引水入城!于是就开始做T2,T3,水完之后就开始看T1,首先看的是题目中给出的翻译,可是翻译的质量比较差以至于看不懂,就花了10分钟去看英文的题面,感觉非常不可做呢...后来觉得即使是暴力也得打打才行,所以写了挺长时间弄完了这道题,愉快的跑回了学长学姐们的机房。过了一会loli看到我们在这里,就说不要好高骛远,要脚踏实地的学习,不过我说我会做的题都做完了,于是就被批准留在这里。晚饭后并没有回我们的机房看成绩,然而老师把我们叫回去看。一点开测评包$180$,感觉布星,点开详细信息发现T1爆零,T2超时一个点,T3错了一个点,关键是和上午错的一样,所以说上午的题我果然还是没有理解呢。后来仔细想了一下,又写了总结,突然明白为什么会错了。
在引水入城这道题中,一个比较重要的性质是每个点覆盖的区间是连续的,这个问题以前我是感性认识的,后来画了图才明白这个结论有一个前提是有解,所以在无解的情况下覆盖的区间不一定连续。在错误的写法中,我是这样判断无解时不能被覆盖的点的个数的:两重循环,外层循环沙漠点,内层循环河岸,用河岸覆盖区间的左右端点来卡沙漠点,如果所有的区间都无法覆盖证明这是一个无法被浇灌的点,但是现在我明白了,在无解的情况下用区间的左右端点去卡是不正确的,所以正确的方法是查看$vis$数组,看看每个沙漠点是否曾被访问过。
后来发现T1的数据和题目描述不符,改了数据之后我惊奇的发现这题我竟然A了,总分达到了惊人的$280$,果然是暴力出奇迹,比较开心。
T1 Painting A Board:http://bailian.openjudge.cn/practice/1691/
# include <cstdio>
# include <iostream>
# include <cstring>
# define R register int using namespace std; int m,n,ans;
int a[],b[],c[],d[],co[],g[][];
int fir[][],pai[];
bool visc[]; void dfs(int x,int s,int colo)
{
if(x==n+)
{
ans=min(ans,s);
return ;
}
if(s>=ans) return ;
bool f;
for (R i=;i<=n;++i)
{
f=true;
if(pai[i]) continue;
for (R j=;j<=n;++j)
{
if(fir[i][j]&&pai[j]==false)
{
f=false;
break;
}
}
if(f==false) continue;
pai[i]=true;
if(co[i]==colo)
dfs(x+,s,colo);
else
dfs(x+,s+,co[i]);
pai[i]=false;
}
} int main()
{
scanf("%d",&m);
while(m--)
{
ans=;
memset(co,,sizeof(co));
memset(fir,,sizeof(fir));
memset(g,,sizeof(g));
scanf("%d",&n);
for (R i=;i<=n;++i)
{
scanf("%d%d%d%d%d",&a[i],&b[i],&c[i],&d[i],&co[i]);
visc[co[i]]=true;
for (R j=a[i]+;j<=c[i];++j)
for (R k=b[i]+;k<=d[i];++k)
g[j][k]=i;
}
for (R i=;i<=n;++i)
{
if(a[i]==) continue;
for (R j=b[i]+;j<=d[i];j++)
fir[i][g[a[i]][j]]=;
}
for (R i=;i<=;++i)
if(visc[i]) dfs(,,i);
printf("%d\n",ans);
}
return ;
}
Paintint A Board
T2 虫食算:https://www.luogu.org/problemnew/show/P1092
T3 引水入城:https://www.luogu.org/problemnew/show/P1514
然后这里再加一个wzx dalao的测试总结作为结束:(他还没写 (他还是没写
---shzr