作者太巨辣!

%%%乔猫

好。

ZJ一下:

哭笑不得。

T1直接审错题(没发现题目里那个憨P的更新限制),然后直接跑了$\mathsf{SPFA}$,然后我又发现了。以为我死了,结果手玩一下发现……那句话没有用……

试图卡一下$\mathsf{SPFA}$但是发现卡不掉,我想这么水一题卡毛线$\mathsf{SPFA}$,于是就扔掉了。

T2打了贪心错解组合版,但是自己大力$\text{hack}$完后就以为死了,后来还有$30pts$,作者太友好了(感动

T3发现直接在角度上维护即可,于是码完,然后发现给的端点真不友好,不是左上右下,而是左下右上,后来还被卡精了$\text{kuku}$

这是TJ:

T1:

名正言顺的AC了。

作者没有构造卡$\mathsf{SPFA}$的数据……

很不明白网格图上咋卡……

#include <iostream>
#include <cstring>
#include <cstdio>
#define N 555 using namespace std; const int mx[]={0, 0,1,-1},
my[]={1,-1,0, 0};
typedef pair<int,int> pii;
template<typename T>
class Myqueue{
T A[N*N*100];
int f,b;
public:
Myqueue(){f=b=0;}
void clear(){f=b=0;}
void push(const T k){A[b++]=k;}
void pop(){f++;}
T front(){return A[f];}
bool empty(){return f==b;}
};
Myqueue<pii>q;
int lines,cols;
int tps[N][N],lps[N][N];
int fix,fiy;
bool inq[N][N];
void pour(){
for(int i=1;i<=3;i++){
for(int j=1;j<=cols;j++){
cout<<"----";
}
if(i!=3)cout<<"+";
}
puts("");
for(int i=1;i<=lines;i++){
for(int j=1;j<=cols;j++)
printf("%4d",lps[i][j]);
cout<<"|";
for(int j=1;j<=cols;j++)
printf("%4d",tps[i][j]);
cout<<"|";
for(int j=1;j<=cols;j++)
printf("%4d",inq[i][j]);
puts("");
}
/* puts("------Inqueue----------");
for(int i=1;i<=lines;i++){
for(int j=1;j<=cols;j++){
printf("%4d",inq[i][j]);
}puts("");
}*/
}
inline bool in_b(int x,int y){
return x>=1&&x<=lines&&y>=1&&y<=cols;
}
inline bool in_b(pii ps){
return in_b(ps.first,ps.second);
}
void bfs(int x,int y){//?
q.push(make_pair(x,y));
inq[x][y]=1;
while(!q.empty()){
int fx=q.front().first,
fy=q.front().second;
// cout<<fx<<" "<<fy<<endl;
q.pop();
if(q.empty())q.clear();
inq[fx][fy]=0;//?Double UPD??
for(int i=0;i<4;i++){
int tx=fx+mx[i],
ty=fy+my[i];
if(in_b(tx,ty) && lps[tx][ty]<lps[fx][fy]-tps[tx][ty]){
lps[tx][ty]=lps[fx][fy]-tps[tx][ty];
if(!inq[tx][ty]){
q.push(make_pair(tx,ty));
inq[tx][ty]=1;
}
}
}
// pour();
}
}
int main(){
// freopen("neworld.in" ,"r",stdin);\
freopen("neworld.out","w",stdout);
int a,b,c;
scanf("%d%d",&lines,&cols);
for(int i=1;i<=lines;i++)
for(int j=1;j<=cols;j++)
scanf("%d",&tps[i][j]);
scanf("%d%d%d%d%d",&a,&b,&c,&fix,&fiy);
lps[a][b]=c;
bfs(a,b);
printf("%d\n",lps[fix][fiy]);
// cerr<<clock()<<endl;
}

叫$\mathsf{BFS}$但是是$\mathsf{SPFA}$

T2:

状压即可,细节还行。

#include <iostream>
#include <cstring>
#include <climits>
#include <cstdio> //#include "debug.h" #define N 111
#define M 10
#define S (1<<9)+10 using namespace std; int dp[N][S],mp[N];
int lines,cols,maxs; inline int lowbit(int x){
return x&(-x);
}
inline int count(int x){
int n_1=0;
while(x){
x-=lowbit(x);
n_1++;
}
return n_1;
}
bool is_ok(int i1,int pos1){
for(int i=1;i<=cols;i++){
int j=1<<(i-1);
if(j&pos1){
if(!(j&mp[i1]))return false;
}
}
for(int i=1;i<=cols;i++){
int j=1<<(i-1);
if((j&mp[i1])&&(!((j>>1)&mp[i1]))){
if(!(j&pos1))return false;
}
}
return true;
}
int get_merge(int i1,int pos1,int i2,int pos2){
int dat=0;
for(int i=1;i<=cols;){
int j=1<<(i-1);
// cout<<i<<" Outout"<<endl;
if((pos1&j) && (pos2&j)){
int k=i+1,l=1<<(k-1);
while(1){
//cerr<<k<<endl;
if(k>cols){
dat++;
break;
}
if(((!(l&mp[i1])) || (l&pos1)) && \
((!(l&mp[i2])) || (l&pos2))){
// puts("All WA");
dat++;
break;
}
else if( (l&mp[i1])&&(l&mp[i2])&&(!(l&pos1))&&(!(l&pos2)) ){
//puts("One WA");
k++,l=1<<(k-1);
}
else
break;
//puts("Contined");
}
i=k;
continue;
}
i++;
}
// cout<<"Res:"<<dat<<endl;
return dat;
}
int main(){
ios_base::sync_with_stdio(false);
int a;
cin>>lines>>cols;
maxs=(1<<cols)-1;
for(int i=1;i<=lines;i++){
for(int j=1;j<=cols;j++){
cin>>a;
mp[i]|=a<<(j-1);
}
}
// for(int i=1;i<=lines;i++)\\
cerr<<bin(mp[i],cols)<<endl;
memset(dp,0x3f,sizeof dp);
for(int s=0;s<1<<cols;s++){
if(is_ok(1,s)){
dp[1][s]=count(s);
// cerr<<dp[1][s]<<" "<<bin(s,cols)<<endl;
}
}
for(int i=2;i<=lines;i++){
for(int s=0;s<1<<cols;s++){
if(!is_ok(i,s))continue;
for(int t=0;t<1<<cols;t++){
if(!is_ok(i-1,t))continue;
//cerr<<"Mp["<<i<<"]="<<bin(mp[i],cols)\
<<" S:"<<bin(s,cols)<<" "\
<<"Mp["<<i-1<<"]="<<bin(mp[i-1],cols)\
<<" T:"<<bin(t,cols)<<endl;
int val=count(s)-get_merge(i,s,i-1,t);
// cout<<"val:"<<get_merge(i,s,i-1,t)<<endl;
dp[i][s]=min(dp[i][s],
dp[i-1][t]+val);
// cout<<"dp["<<i<<"]["<<bin(s,cols)<<"]="<<dp[i][s]<<endl;
}
}
}
int ans=INT_MAX;
for(int s=0;s<1<<cols;s++)
if(is_ok(lines,s))
ans=min(ans,dp[lines][s]);
cout<<ans<<endl;
}

T3:

不会!

19-10-27-S的更多相关文章

  1. 背水一战 Windows 10 (27) - 控件(文本类): TextBlock

    [源码下载] 背水一战 Windows 10 (27) - 控件(文本类): TextBlock 作者:webabcd 介绍背水一战 Windows 10 之 控件(文本类) TextBlock 示例 ...

  2. 第15次Scrum会议(10/27)【欢迎来怼】

    一.小组信息 队名:欢迎来怼 小组成员 队长:田继平 成员:李圆圆,葛美义,王伟东,姜珊,邵朔,冉华 小组照片 二.开会信息 时间:2017/10/27 17:20~17:45,总计25min. 地点 ...

  3. JZOJ 4269. 【NOIP2015模拟10.27】挑竹签

    4269. [NOIP2015模拟10.27]挑竹签 (File IO): input:mikado.in output:mikado.out Time Limits: 1000 ms  Memory ...

  4. Ubuntu 19.10 发布 | 云原生生态周报 Vol. 24

    作者 | 木苏.进超.冬岛.元毅.心水.衷源 业界要闻 1.云原生编程语言 Pulumi 1.0 pulumi ,一款中立的开源云开发平台,Pulumi 支持多语言.混合云环境.完全可扩展.初期支持 ...

  5. [Linux] 在 Ubuntu 19.10 上开启 SSH 服务并允许远程登录

    在 Ubuntu 19.10 上安装 SSH,并开启服务 0.检查并确认系统当前是否已安装SSH: sudo ps -e | grep ssh 如果只有 ssh-agent 说明 ssh-server ...

  6. [Linux] 树莓派 4B 安装 Ubuntu 19.10 (Eoan Ermine) IOT 版

    硬件:Raspberry Pi 4B系统:Ubuntu 19.10 (Eoan Ermine) for IOT官网:https://ubuntu.com/download/iot/raspberry- ...

  7. Ubuntu 19.10 安装 jupyter

    安装pip3 ubuntu 19.10 已经没有python了,取代的是python3. 执行sudo apt install python3-pip安装pip3 安装jupyter 执行sudo p ...

  8. Ubuntu 19.10将使用GCC 9作为默认编译器

    作为我们这一周期一直期待的变化,Ubuntu 19.10升级到GCC 9作为GCC 8的默认系统编译器. Ubuntu 19.10(和Ubuntu 20.04 LTS)将使用GCC 9 stable作 ...

  9. Unix 网络编程卷一源码编译踩坑记录 ubtutu 19.10

    在阅读unpv1时运行源代码的环境配置,这里简单记录一下 源代码里的README 写得挺详细的,但是在Linux 系统的下还没没办法直接编译通过的, 这里我使用的是ubuntu 19.10(在腾讯云1 ...

  10. 程序员的 Ubuntu 19.10 配置与优化指南

    原文地址:程序员的 Ubuntu 19.10 配置与优化指南 0x00 环境 CPU: Intel Core i9-9900k GPU: GeForce RTX 2070 SUPER RAM: DDR ...

随机推荐

  1. python+tushare获取A股所有股票代码和名称列表

    接口:stock_basic 描述:获取基础信息数据,包括股票代码.名称.上市日期.退市日期等 注:tushare模块下载和安装教程,请查阅我之前的文章 输入参数 名称      |      类型  ...

  2. 11-python基础—格式化的两种方式

    一.使用% %s 字符串 %c 字符 %d 十进制(整数) %i 整数 %u 无符号整数 %o 八进制整数 %x 十六进制整数 %X 十六进制整数大写 %e 浮点数格式1 %E 浮点数格式2 %f 浮 ...

  3. iOS开发系列-Charles

    概述 Charles相当于一个插在服务器和客户端之间的"过滤器".当客户端向服务器发起请求的时候,先到charles进行过滤,然后charles在把最终的数据发送给服务器: 注意: ...

  4. Asp.net MVC使用EasyNetQ操作RabbitMQ

    Demo下载地址:https://download.csdn.net/download/u010312811/11259742 .Net下操作RabbitMQ最常用的SDK是RabbitMQ.Clie ...

  5. 2019 Multi-University Training Contest 3 B 支配树

    题目传送门 题意:给出衣服有向无环图(DAG),,定义出度为0的点为中心城市,每次询问给出两个点,求破坏任意一个城市,使得这两个点至少有一个点无法到达中心城市,求方案数. 思路:首先建立反向图,将城市 ...

  6. 6.RDD算子实战

    from pyspark import SparkContext,SparkConf import sys if __name__ == '__main__': if len(sys.argv) != ...

  7. scala中的闭包简单使用

    object Closure { /** * scala中的闭包 * 函数在变量不处于其有效作用域内,还能够对变量进行访问 * * @param args */ def main(args: Arra ...

  8. Linux tee命令使用详解分享

    tee命令主要被用来向standout(标准输出流,通常是命令执行窗口)输出的同时也将内容输出到文件,下面是tee的man 信息 read from standard input and write ...

  9. chrome控制台使用jquery

    html页面中加入:<script type="text/javascript" src="http://static.fanxian.com/script/jqu ...

  10. 怎么规划一个零基础学习Unity3D的“方法”或者“流程”?

    具体出处:https://www.zhihu.com/question/35542990 我只是一个计算机相关专业毕业的,已经掌握了基础的C#并开发过.net的.目前突然心血来潮对unity3D有兴趣 ...