CSU 1711 Kinfolk【模拟】
来源:互联网 发布:ctp交易接口源码 编辑:程序博客网 时间:2024/05/27 10:43
题目链接
http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1711
思路
题意有点复杂,不好说,看原题吧。
就是找到两点层数差距p,和他们的公共祖先离他们层数较小的点的差距q,然后分类讨论。
c是层数较大的那个点的相应的和另一个点同层的父辈。
AC代码
#include <iostream>#include <algorithm>#include <string>#include <cmath>#include <cstring>#include <cstdio>#include <map>#include <cstring>using namespace std;int level(int a){ int w=1; for(int i=0 ; i<32 ; ++i) { int ww=w<<i; if(ww>a) { return i; } } return -1;}bool is_same_level(int a, int b){ if(level(a)==level(b))return 1; else return 0;}int get_removal(int a, int b)//b>a{ int cnt=0; while(1) { if(is_same_level(a,b))return cnt; cnt++; b/=2; } return -1;}int get_removal_cousin(int a, int b)//b>a{ int cnt=0; while(1) { if(is_same_level(a,b))return b; cnt++; b/=2; } return -1;}int get_cousin(int a, int b)//level(a)==level(b){ int cnt=0; while(1) { if(a==b)return cnt; cnt++; a/=2; b/=2; } return -1;}int main(){ int a,b; char sex; while(cin>>a>>b>>sex,a!=-1) { a++;b++; if(a==b) { printf("self\n"); continue; } bool flag=0;//has reversed if(b<a) { flag=1; swap(a,b); } int p=get_removal(a,b); int c=get_removal_cousin(a,b); int q=get_cousin(a,c); if(c==a)//直系 { if(p>4)printf("kin"); else { if(p>2) { for(int i=0 ; i<p-2 ; ++i) printf("great-"); } if(p>=2) { printf("grand"); } if(flag==0) { if(sex=='M') printf("son"); else printf("daughter"); } else { if(sex=='M') printf("father"); else printf("mother"); } } } else { if(q==1)//直系 { if(p==0) { if(sex=='M') printf("brother"); else printf("sister"); } else if(p>4)printf("kin"); else { if(p>2) { for(int i=0 ; i<p-2 ; ++i) printf("great-"); } if(p>=2) { printf("grand"); } if(flag==0) { if(sex=='M') printf("nephew"); else printf("niece"); } else { if(sex=='M') printf("uncle"); else printf("aunt"); } } } else { if(q>=5 || p>=4)printf("kin"); else { if(q==2)printf("1st cousin"); if(q==3)printf("2nd cousin"); if(q==4)printf("3rd cousin"); if(p!=0)printf(" "); if(p==1)printf("once removed"); if(p==2)printf("twice removed"); if(p==3)printf("thrice removed"); } } } printf("\n"); } return 0;}
0 0
- CSU 1711 Kinfolk【模拟】
- 模拟 csu1711 Kinfolk
- CSU 1555 splay模拟
- CSU 1765 简单shell 模拟
- CSU 1100: 一二三【模拟】
- CSU 1202 Stone-scissors-cloth (模拟)
- CSU 1203 Super-increasing sequence (模拟)
- csu oj 1031 Real Numbers(模拟)
- CSU 1267: Operation(模拟啊 )
- CSU 1574 Amanda Lounges 模拟题
- csu oj K swap operation 模拟
- CSU 1112: 机器人的指令【模拟题】
- csu 1716 Morse(模拟,字符串处理)
- CSU 1312 榜单(模拟)
- Csu-1850-Grade School Multiplication [模拟]
- CSU~1328: 近似回文词(模拟)
- CSU 1093 Caps Lock (贪心+模拟)
- 文章标题 CSU 1856: Sokoban(模拟)
- 文章标题 : 介绍 GNU Octave scrip
- POJ 1002
- SDWebImage 中简单的清除缓存
- 观察者模式
- 聚集索引和非聚集索引
- CSU 1711 Kinfolk【模拟】
- 主元素-----lintcode
- 求a~b内与n互素的数的个数 容斥原理
- dump和coredump
- POJ 1003
- spring(16)------spring的数据源配置
- Java内部类
- 第四章:android核心组件之SimpleAdapter适配器构造函数的详解(二)
- POJ 1004