洛谷 P2118 比例简化
来源:互联网 发布:mac缺少图像源地址 编辑:程序博客网 时间:2024/06/11 05:20
题目描述
在社交媒体上,经常会看到针对某一个观点同意与否的民意调查以及结果。例如,对某一观点表示支持的有1498 人,反对的有 902人,那么赞同与反对的比例可以简单的记为1498:902。
不过,如果把调查结果就以这种方式呈现出来,大多数人肯定不会满意。因为这个比例的数值太大,难以一眼看出它们的关系。对于上面这个例子,如果把比例记为5:3,虽然与真实结果有一定的误差,但依然能够较为准确地反映调查结果,同时也显得比较直观。
现给出支持人数A,反对人数B,以及一个上限L,请你将A比B化简为A’比B’,要求在A’和B’均不大于L且A’和B’互质(两个整数的最大公约数是1)的前提下,A’/B’ ≥ A/B且A’/B’ - A/B的值尽可能小。
(本题目为2014NOIP普及T2)
输入输出格式
输入格式:
输入共一行,包含三个整数A,B,L,每两个整数之间用一个空格隔开,分别表示支持人数、反对人数以及上限。
输出格式:
输出共一行,包含两个整数A’,B’,中间用一个空格隔开,表示化简后的比例。
输入输出样例
输入样例#1:
1498 902 10
输出样例#1:
5 3
说明
对于100%的数据,1 ≤ A ≤ 1,000,000,1 ≤ B ≤ 1,000,000,1 ≤ L ≤ 100,A/B ≤ L。
【分析】
暴力枚举…
【代码】
//NOIP 2013 华容道 #include<queue>#include<vector>#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#define mp make_pair#define M(a) memset(a,0,sizeof a)#define fo(i,j,k) for(i=j;i<=k;i++)using namespace std;int n,m,q,ex,ey,sx,sy,tx,ty,ans;vector < pair<int,int> > f[35][35];struct node {int x,y,whe,now;}; //目标棋子坐标,空白格子相对坐标,当前移动时间 //1上 2下 3左 4右 int map[35][35],dis[35][35];int hox[5]={0,-1,1,0,0},hoy[5]={0,0,0,-1,1};bool vis_bfs[35][35][5],vis_spfa[35][35];inline int spfa(int stx,int sty,int edx,int edy,int vix,int viy){ if(stx==edx && sty==edy) return 0; int i,j,k;M(vis_spfa); memset(dis,0x3f,sizeof dis); dis[stx][sty]=0; vis_spfa[vix][viy]=vis_spfa[stx][sty]=1; queue < pair<int,int> > que; while(!que.empty()) que.pop(); que.push(mp(stx,sty)); while(!que.empty()) { pair<int,int> tmp=que.front();que.pop(); int ux=tmp.first,uy=tmp.second; fo(i,0,f[ux][uy].size()-1) { int vx=f[ux][uy][i].first,vy=f[ux][uy][i].second; if(!vis_spfa[vx][vy]) { vis_spfa[vx][vy]=1; que.push(mp(vx,vy)); dis[vx][vy]=dis[ux][uy]+1; } if(dis[edx][edy]<100000) return dis[edx][edy]; } } return 100000;}inline void bfs(int x,int y){ int i,j,k; int ddd[35][35][5]; memset(ddd,0x3f,sizeof ddd); queue <node> que; M(vis_bfs); while(!que.empty()) que.pop(); if(map[x-1][y]) que.push(node{x-1,y,2,spfa(ex,ey,x-1,y,x,y)+1}),vis_bfs[x-1][y][2]=1; if(map[x+1][y]) que.push(node{x+1,y,1,spfa(ex,ey,x+1,y,x,y)+1}),vis_bfs[x+1][y][1]=1; if(map[x][y+1]) que.push(node{x,y+1,3,spfa(ex,ey,x,y+1,x,y)+1}),vis_bfs[x][y+1][3]=1; if(map[x][y-1]) que.push(node{x,y-1,4,spfa(ex,ey,x,y-1,x,y)+1}),vis_bfs[x][y-1][4]=1; while(!que.empty()) { node tmp=que.front();que.pop(); int ux=tmp.x,uy=tmp.y,now=tmp.now,whe=tmp.whe; if(ux==tx && uy==ty) ans=min(ans,now); fo(i,0,f[ux][uy].size()-1) { int vx=f[ux][uy][i].first,vy=f[ux][uy][i].second; //棋子位置 fo(j,1,4) if(ux==vx+hox[j] && uy==vy+hoy[j]) break; int nul=now+spfa(ux+hox[whe],uy+hoy[whe],vx,vy,ux,uy)+1; if(!vis_bfs[vx][vy][j] || nul<ddd[vx][vy][j]) { if(nul>100000 || nul>ans) break; ddd[vx][vy][j]=min(ddd[vx][vy][j],nul); vis_bfs[vx][vy][j]=1; que.push(node{vx,vy,j,nul}); if(vx==tx && vy==ty) ans=min(ans,nul); } } }}int main(){ int i,j; scanf("%d%d%d",&n,&m,&q); fo(i,1,n) fo(j,1,m) scanf("%d",&map[i][j]); fo(i,1,n) fo(j,1,m) if(map[i][j]) { if(map[i-1][j]) f[i][j].push_back(mp(i-1,j)); if(map[i][j-1]) f[i][j].push_back(mp(i,j-1)); if(map[i+1][j]) f[i][j].push_back(mp(i+1,j)); if(map[i][j+1]) f[i][j].push_back(mp(i,j+1)); } while(q--) { ans=100000; scanf("%d%d%d%d%d%d",&ex,&ey,&sx,&sy,&tx,&ty); if(sx==tx && sy==ty) {printf("0\n");continue;} bfs(sx,sy); if(ans<100000) printf("%d\n",ans); else printf("-1\n"); } return 0;}
1 0
- 洛谷 P2118 比例简化
- 洛谷 P2118 比例简化
- 比例简化
- [复习]欧几里得 比例简化
- NOIP2014普级组第二题 比例简化
- NOIP2014普级组第二题 比例简化
- 2017.4.20 比例简化 思考记录
- 比例简化 (noip2014普及组第二题)
- 简化的图片匹配(利用颜色比例)
- noip2014 比例简化 (最大公约数+分数大小比较)
- 2014NOIP普级组第二题--比例简化(参考洛谷题解)
- 【洛谷 2118】 比例化简
- 比例模式
- 比例转换
- 比例函数
- 比例再保险
- 计算比例
- 最大比例
- 标称属性的概念分层
- Maven:编写Maven组件
- redis 详解(window安装)
- sheepdog+zookeeper存储集群搭建:4个节点安装sheepdog(其中有3个为zookeeper节点)
- Unity3d MovieTexture 实现视频播放
- 洛谷 P2118 比例简化
- Java实现异步发送邮件
- AJAX-实现服务端客户端异步通信
- CocoaPods的安装和使用
- Hibernate最基础的项目搭建与配置
- android studio 如何设置Console字体大小
- android 基础 res文件 动画anim
- 多线程四
- Log4j输出格式控制--log4j的PatternLayout参数含义以及详细配置