水水微软苏州校招笔试 1月17日 题解..
2015-01-19 08:43
363 查看
A.Koch Snowflake
找规律...观察K2,K3可以得出在每个Ki中mod 4为2,3的将是当前最新出来的颜色,所以只需要不断的往前迭代直到当前标号迭代后所对应标号是某个Ki中mod
4为2,3的...
B.Shortest Proper Prefix
简单的字典树...为了方便记录一下每个点的father...
C.Troublesome Power Supply
对于些对控制器定义了一些不能同时关,一些不能同时开..否则系统不稳定...由于控制器只有两种状态..所以是很明显的2-SAT
找规律...观察K2,K3可以得出在每个Ki中mod 4为2,3的将是当前最新出来的颜色,所以只需要不断的往前迭代直到当前标号迭代后所对应标号是某个Ki中mod
4为2,3的...
#include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #include<string.h> #include<queue> #include<stack> #include<map> #include<set> #define MAXN 100005 using namespace std; int main() { int cases,i,n; scanf("%d",&cases); while (cases--) { scanf("%d%d",&i,&n); while (i%4!=2 && i%4!=3 && n) { if (i%4==0) i/=4; else i=i/4+1; n--; } printf("%d\n",n); } return 0; }
B.Shortest Proper Prefix
简单的字典树...为了方便记录一下每个点的father...
#include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #include<string.h> #include<queue> #include<stack> #include<map> #include<set> #define MAXN 2000005 using namespace std; struct node { int son[26],f,m; }T[MAXN]; char s[MAXN]; int main() { int n,i,len,num,ans; memset(T,0,sizeof(T)),num=0; scanf("%d",&n),T[0].m=10; while (n--) { scanf("%s",s),len=strlen(s); int h=0,i,x; for (i=0;i<len;i++) { x=s[i]-'a'; if (!T[h].son[x]) T[h].son[x]=++num,T[num].f=h; h=T[h].son[x]; T[h].m++; } } ans=0; for (i=1;i<=num;i++) if (T[i].m<=5 && T[T[i].f].m>5) ans++; printf("%d\n",ans); return 0; }
C.Troublesome Power Supply
对于些对控制器定义了一些不能同时关,一些不能同时开..否则系统不稳定...由于控制器只有两种状态..所以是很明显的2-SAT
#include<iostream> #include<stdio.h> #include<string.h> #include<cmath> #include<queue> #include<stack> #include<set> #include<algorithm> #define ll long long #define oo 1000000007 #define pi acos(-1.0) #define MAXN 20005 #define MAXM 800005 using namespace std; struct node { int x,y,next; }edge[MAXM]; int _next[MAXN],En,dfn[MAXN],low[MAXN],tp[MAXN],tpnum,DfsIndex; bool instack[MAXN]; stack<int> mystack; void addedge(int x,int y) { edge[++En].next=_next[x],_next[x]=En; edge[En].x=x,edge[En].y=y; } void InputData(int n,int m) { int x,y,s,x0,x1,y0,y1; memset(_next,0,sizeof(_next)),En=0; while (m--) { scanf("%d%d%d",&x,&y,&s); x0=x<<1,x1=x0|1,y0=y<<1,y1=y0|1; if (!s) { addedge(x0,y1),addedge(y0,x1); }else { addedge(x1,y0),addedge(y1,x0); } } return; } void tarjan(int x) { int y,k; dfn[x]=low[x]=++DfsIndex; instack[x]=true; mystack.push(x); for (k=_next[x];k;k=edge[k].next) { y=edge[k].y; if (!dfn[y]) { tarjan(y); low[x]=min(low[x],low[y]); }else if (instack[y]) low[x]=min(low[x],dfn[y]); } if (low[x]==dfn[x]) { tpnum++; do { x=mystack.top(); mystack.pop(); tp[x]=tpnum; instack[x]=false; }while (low[x]!=dfn[x]); } return; } bool judge(int n) { int i; for (i=0;i<n;i++) if (tp[i<<1]==tp[i<<1|1]) return false; return true; } int main() { int cases,n,m; scanf("%d",&cases); while (cases--) { scanf("%d%d",&n,&m); InputData(n,m); memset(dfn,0,sizeof(dfn)); memset(instack,false,sizeof(instack)); while (!mystack.empty()) mystack.pop(); DfsIndex=tpnum=0; for (int i=0;i<(n<<1);i++) if (!dfn[i]) tarjan(i); if (judge(n)) puts("Yes"); else puts("No"); } return 0; }
相关文章推荐
- hihoCoder 1107 Shortest Proper Prefix 微软苏州校招笔试 1月17日
- hihoCoder 1106 Koch Snowflake 微软苏州校招笔试 1月17日
- Hihocoder #1095 : HIHO Drinking Game (微软苏州校招笔试)( *【二分搜索最优解】)
- hihoCoder 1103 Colorful Lecture Note 微软苏州校招笔试 1月10日
- hihoCoder 1096 Divided Product 微软苏州校招笔试 12月27日
- hihoCoder 1095 HIHO Drinking Game 微软苏州校招笔试 12月27日
- hihoCoder #1094 : Lost in the City(枚举,微软苏州校招笔试 12月27日 )
- 微软苏州校招笔试题目(1月10日)Colorful Lecture Note的解法
- hihocoder #1103 : Colorful Lecture Note微软苏州校招笔试 1月10日(字符串处理+栈)
- 微软苏州校招笔试 12月27日 By Java
- 微软苏州校招笔试(2016.12):#1091 : Clicker
- 微软苏州校招笔试 12月27日
- hihocoder #1094 : Lost in the City微软苏州校招笔试 12月27日 (建图不大【暴力枚举】 子图的4种形态 1Y )
- 微软笔试题(苏州)
- 微软2017校招笔试题2 composition
- 微软2017校招笔试题3 registration day
- 微软2016校招4月在线笔试——第一题 Font Size
- 微软校招笔试题#1092 : Have Lunch Together详解以及源码分析
- 【2014校招】微软笔试
- 2016 微软秋招(校招)在线笔试 题目1 : Farthest Point