A1139 | 玩成模拟题的DFS
考试的时候有思路了,但是没写完。这题起码要40min写,思路太诡异了。
刚刚写了一段,只过了一个case,得了18分,还行。明日再战。
#include <stdio.h>
#include <memory.h>
#include <math.h>
#include <string>
#include <vector>
#include <set>
#include <stack>
#include <queue>
#include <algorithm>
#include <map> #define I scanf
#define OL puts
#define O printf
#define F(a,b,c) for(a=b;a<c;a++)
#define FF(a,b) for(a=0;a<b;a++)
#define FG(a,b) for(a=b-1;a>=0;a--)
#define LEN 50000
#define MAX 0x06FFFFFF using namespace std; vector<int> v[];
int cnt=;
map<int,int> ID2index;
void buildConnect(int a,int b);
bool judge(int mul,int pos);
int mode=; typedef struct CP{
int a,b;
CP(int A,int B){a=A;b=B;}
}CP; bool cmp(CP a,CP b); int main() {
freopen("d:/input/A1139.txt","r",stdin);
int n,m,k;
scanf("%d%d",&n,&m);
while(m-->){
int a,b;
scanf("%d %d",&a,&b);
buildConnect(a,b);
buildConnect(b,a);
}
scanf("%d",&k);
while(k-->){
int a,b,i,j,k;
scanf("%d %d",&a,&b);
mode= a*b> ? : ;
vector<CP> ot;
int i1=ID2index[a],i2,i3;
int O1,O2;
FF(i,v[i1].size()) if(judge(v[i1][i]*a,)){//find tongXing
O1=v[i1][i];
i2=ID2index[O1];//is tongXing
FF(j,v[i2].size()) if(judge(v[i2][j]*a,)){//find yiXing
O2=v[i2][j];
i3=ID2index[O2];//is yiXing
FF(k,v[i3].size()) if(v[i3][k]==b){//find object
CP tmp(abs(O1),abs(O2));
ot.push_back(tmp);
break;
}
}
}
int s=ot.size();
sort(ot.begin(),ot.end(),cmp);
O("%d\n",s);
FF(i,s) O("%d %d\n",ot[i].a,ot[i].b);
}
return ;
} void buildConnect(int a,int b){
int index=ID2index[a];
if(index>){//find
v[index].push_back(b);
}else{
ID2index[a]=cnt;//cnt is a new index
v[cnt++].push_back(b);
}
} bool cmp(CP a,CP b){
if(a.a<b.a) return true;
else if(a.a==b.a && a.b<b.b) return true;
return false;
} bool judge(int mul,int pos){
if(mode==){
if(pos== && mul>)return true;
if(pos== && mul<)return true;
}
if(mode==){
if(pos== && mul>)return true;
if(pos== && mul>)return true;
}
return false;
}
2017年3月14日,24分:
#include <stdio.h>
#include <memory.h>
#include <math.h>
#include <string>
#include <vector>
#include <set>
#include <stack>
#include <queue>
#include <algorithm>
#include <map> #define I scanf
#define OL puts
#define O printf
#define F(a,b,c) for(a=b;a<c;a++)
#define FF(a,b) for(a=0;a<b;a++)
#define FG(a,b) for(a=b-1;a>=0;a--)
#define LEN 10000
#define MAX 0x06FFFFFF
#define V vector<int> using namespace std; typedef struct Node{
int a,b;
Node(int a=,int b=):a(a),b(b){
}
bool operator < (const Node& obj) const
{
if(a<obj.a || (a==obj.a && b<obj.b))
return ;
return ;
}
}; vector<int> adj[LEN];
int isg[LEN];
int vis[LEN];
vector<int> path;
set<Node> ans; int N,M,K; //dfs(s,e,0,mode);
void dfs(int s,int e,int cnt,int mode){
if(cnt>) return;
if(s==e && cnt==){
ans.insert(Node(path[],path[]));
return;
}
int i;
FF(i,adj[s].size()){
int o=adj[s][i];
if(vis[o]==){
bool isOK=;
if(mode<){
if(cnt%== && isg[s]*isg[o]>) isOK=;
if(cnt%== && isg[s]*isg[o]<) isOK=;
}else{
if(isg[s]*isg[o]>) isOK=;
}
if(isOK){
vis[o]=;
path.push_back(o);
dfs(o,e,cnt+,mode);
path.pop_back();
vis[o]=;
}
}
}
} int proc(int a){
if(a<){
a=-a;
isg[a]=-;
}else{
isg[a]=;
}
return a;
} int main(){
// freopen("1139.txt","r",stdin);
int s,e,i,j,a,b;
I("%d%d",&N,&M);
while(M--){
I("%d%d",&a,&b);
a=proc(a);
b=proc(b);
adj[a].push_back(b);
adj[b].push_back(a);
}
I("%d",&K);
while(K--){
I("%d%d",&s,&e);
int mode=s*e;
s=abs(s);
e=abs(e);
ans.clear();
path.clear();
vis[s]=;
dfs(s,e,,mode);
vis[s]=;
set<Node>::iterator it=ans.begin();
O("%d\n",ans.size());
while(it!=ans.end()){
O("%04d %04d\n",it->a,it->b);
it++;
}
}
return ;
}
A1139 | 玩成模拟题的DFS的更多相关文章
- 《ACM国际大学生程序设计竞赛题解Ⅰ》——模拟题
这篇文章来介绍一些模拟题,即一类按照题目要求将现实的操作转换成程序语言. zoj1003: On every June 1st, the Children's Day, there will be a ...
- noip模拟题题解集
最近做模拟题看到一些好的题及题解. 升格思想: 核电站问题 一个核电站有N个放核物质的坑,坑排列在一条直线上.如果连续M个坑中放入核物质,则会发生爆炸,于是,在某些坑中可能不放核物质. 任务:对于给定 ...
- 8.22 NOIP 模拟题
8.22 NOIP 模拟题 编译命令 g++ -o * *.cpp gcc -o * *.c fpc *.pas 编译器版本 g++/gcc fpc 评测环境 位 Linux, .3GHZ CPU ...
- CSP复赛day2模拟题
没错,我又爆零了.....先让我自闭一分钟.....so 当你忘记努力的时候,现实会用一记响亮的耳光告诉你东西南北在哪. 好了,现在重归正题: 全国信息学奥林匹克联赛(NOIP2014) 复赛模拟题 ...
- poj 1008:Maya Calendar(模拟题,玛雅日历转换)
Maya Calendar Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 64795 Accepted: 19978 D ...
- poj1472[模拟题]
Instant Complexity Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 2017 Accepted: 698 ...
- ZOJ1111:Poker Hands(模拟题)
A poker deck contains 52 cards - each card has a suit which is one of clubs, diamonds, hearts, or sp ...
- HDU 4041 Eliminate Witches! (模拟题 ACM ICPC 2011亚洲北京赛区网络赛)
HDU 4041 Eliminate Witches! (模拟题 ACM ICPC 2011 亚洲北京赛区网络赛题目) Eliminate Witches! Time Limit: 2000/1000 ...
- ACdreamoj(1105)模拟题
题意:射一次激光最多能够攻击到几个敌人(因为激光非常强大,能够在击中敌人后穿过它,而瑶瑶自己的坦克因为有特殊装置,所以不会被激光击中.激光也会直接穿过它) . 表示此处为空地 * 表示此处为障碍(激光 ...
随机推荐
- go ---switch语句
package main import ( "fmt" ) func main() { var ar = [...]string{"A", "B&qu ...
- 彻底搞懂Javascript的this
在Javascript中,最玄妙的特性之一,就是this的指向玄幻莫测,一会儿指向这一会儿指向那,让初学者十分伤脑筋. 本文总结一下,方便初学者掌握奥妙之处,同时方便老鸟温故而知新. 首先,看一段代码 ...
- Delphi面向对象的编程思想
第一章.建立面向对象的新思维 1.1.1历史背景 目前对象技术的前沿课题包括设计模式.分布式对象系统.和基于网络的对象应用等 目前面向对象的语言包含4个基本的分支: 1.基于Smalltalk的:包括 ...
- c++打印实心菱形,空心三角形,十字星,空心正方形,实心平行四边形
今天翻资料的时候,无意间发现了一个文件,是刚接触编程的时候用c++写的一段程序,我称之为"图形打印机",想着把所有图形都打印出来,后来发现其实每种图形的代码都是一个思路,就不想做重 ...
- YAML语言简明教程
编程免不了要写配置文件,如果你还在用xml/ini/json,就有点过时了,怎么写配置也是一门学问. YAML 是专门用来写配置文件的语言,非常简洁和强大,远比 JSON 格式方便. 本文介绍 YAM ...
- Docker Cheatsheet
一.创建 docker create:创建容器,处于停止状态. centos:latest:centos容器:最新版本(也可以指定具体的版本号).本地有就使用本地镜像,没有则从远程镜像库拉取.创建成功 ...
- django中navie时间和aware时间详解
navie时间和aware时间: 什么是navie时间?什么是aware时间? navie时间:不知道自己的时间表示的是哪个时区的.也就是不知道自己几斤几两.比较幼稚. aware时间:知道自己的时间 ...
- 2019 草花手游java面试笔试题 (含面试题解析)
本人5年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.草花手游等公司offer,岗位是Java后端开发,因为发展原因最终选择去了草花手游,入职一年时间了,也成为了面 ...
- 事件绑定+call apply指向
JS高级 事件—— 浏览器客户端上客户触发的行为都称为事件 所有事件都是天生自带的,不需要我们去绑定,只需要我们去触发,通过obj.事件名=function(){ } 事件名:onmousemove: ...
- 【转载】C#手动往DataTable中末尾新增一行数据
在C#中的Datatable数据变量的操作过程中,需要手动往DataTable变量的末尾新增一行数据,例如一个实际的例子,我们做数据报表,在最后一行可能需要新增一行DataRow数据作为一个汇总记录, ...