Uriel's Corner

Research Associate @ Harvard University / Research Interests: Computer Vision, Biomedical Image Analysis, Machine Learning
posts - 0, comments - 50, trackbacks - 0, articles - 594
还比较水。。但是罚时茫茫多。。。= =

1. 找位置
    nt数组忘记初始化。。OLE*1。。。
    PS: 2012.03.05 updated!! 没有重复出现的字母不需要输出!!
//2005年华中科技大学计算机保研机试题 找位置
#include<stdio.h>
#include
<stdlib.h>
#include
<string.h>

int mk[400],fg[400][100], nt[400];
char s[200];

int main() {
    
int i, j;
    
while(gets(s) != NULL) {
        memset(mk, 
0sizeof(mk));
        memset(fg, 
-1sizeof(fg));
        memset(nt, 
0sizeof(nt));
        
for(i = 0; s[i]; ++i) {
            
if(mk[s[i]]) fg[s[i]][nt[s[i]]++= i;
            
else {
                mk[s[i]] 
= 1;
                fg[s[i]][nt[s[i]]
++= i;
            }
        }
        memset(mk, 
0sizeof(mk));
        
for(i = 0; s[i]; ++i) {
            
if(!mk[s[i]] && nt[s[i]] > 1) {
                printf(
"%c:%d", s[i], fg[s[i]][0]);
                
for(j = 1; j < nt[s[i]]; ++j) printf(",%c:%d", s[i], fg[s[i]][j]);
                puts(
"");
                mk[s[i]] 
= 1;
            }
        }
    }
    
return 0;
}
/************************************************************** 
    Problem: 1199 
    User: Uriel 
    Language: C++ 
    Result: Accepted 
    Time:30 ms 
    Memory:1172 kb 
***************************************************************
*/


2. 最大的两个数
    看错题。。WA*4。。
//2005年华中科技大学计算机保研机试题 最大的两个数 
#include<stdio.h> 
#include
<stdlib.h> 
#include
<string.h> 
#define INF 0x3f3f3f3f 
  
int t[4][5], mx[5][2], pos[5][2]; 
  
int main() 
    
int i, j, cse, fg; 
    
while(~scanf("%d"&cse)) 
        
while(cse--
            
for(i = 0; i < 5++i) 
                mx[i][
0= mx[i][1= -INF; 
            }
 
            
for(i = 0; i < 4++i) 
                
for(j = 0; j < 5++j) 
                    scanf(
"%d"&t[i][j]); 
                    
if(t[i][j] > mx[j][0]) 
                        mx[j][
1= mx[j][0]; 
                        mx[j][
0= t[i][j]; 
                    }
 
                    
else if(t[i][j] > mx[j][1]) mx[j][1= t[i][j]; 
                }
 
            }
 
            
for(i = 0; i < 5++i) 
                
for(j = 0; j < 4++j) 
                    
if(t[j][i] == mx[i][0]) 
                        fg 
= 0
                        pos[i][
0= j; 
                        
break
                    }
 
                    
else if(t[j][i] == mx[i][1]) 
                        fg 
= 1
                        pos[i][
0= j; 
                        
break
                    }
 
                }
 
                
for(++j; j < 4++j) 
                    
if(t[j][i] == mx[i][0&& fg) 
                        pos[i][
1= j; 
                        
break
                    }
 
                    
else if(t[j][i] == mx[i][1&& !fg) 
                        pos[i][
1= j; 
                        
break
                    }
 
                }
 
            }
 
            
for(i = 0; i < 5++i) printf("%d ", t[pos[i][0]][i]); 
            puts(
""); 
            
for(i = 0; i < 5++i) printf("%d ", t[pos[i][1]][i]); 
            puts(
""); 
        }
 
    }
 
    
return 0
}
 
/************************************************************** 
    Problem: 1200 
    User: Uriel 
    Language: C++ 
    Result: Accepted 
    Time:20 ms 
    Memory:1012 kb 
***************************************************************
*/


3. 二叉排序树
    貌似有0的情况。。一开始若结点数为0直接结束就TLE,改为结点数为0就输出空行就AC
//2005年华中科技大学计算机保研机试题 二叉排序树  
#include<stdio.h> 
#include
<stdlib.h> 
#include
<string.h> 
  
struct node 
    
int l, r, s; 
}
p[1000]; 
  
int n; 
  
int ext(int rt, int x) 
    
if(rt == -1return 0
    
else if(p[rt].s == x) return 1
    
else if(x < p[rt].s) return ext(p[rt].l, x); 
    
else
        
return ext(p[rt].r, x); 
}
 
  
void ins(int idx, int rt, int x) 
    
if(x < p[rt].s) 
        
if(~p[rt].l) ins(idx, p[rt].l, x); 
        
else 
            p[rt].l 
= idx; 
            p[idx].l 
= p[idx].r = -1
            p[idx].s 
= x; 
        }
 
    }
 
    
else if(x > p[rt].s) 
        
if(~p[rt].r) ins(idx, p[rt].r, x); 
        
else 
            p[rt].r 
= idx; 
            p[idx].l 
= p[idx].r = -1
            p[idx].s 
= x; 
        }
 
    }
 
}
 
  
void preorder(int rt) 
    
if(~rt) 
        printf(
"%d ", p[rt].s); 
        preorder(p[rt].l); 
        preorder(p[rt].r); 
    }
 
}
 
  
void inorder(int rt) 
    
if(~rt) 
        inorder(p[rt].l); 
        printf(
"%d ", p[rt].s); 
        inorder(p[rt].r); 
    }
 
}
 
  
void postorder(int rt) 
    
if(~rt) 
        postorder(p[rt].l); 
        postorder(p[rt].r); 
        printf(
"%d ", p[rt].s); 
    }
 
}
 
  
int main() 
    
int i, a; 
    
while(~scanf("%d"&n)) 
        
if(!n) 
            puts(
""); 
            
continue
        }
 
        
for(i = 0; i <= n; ++i) p[i].l = p[i].r = -1
        scanf(
"%d"&a); 
        p[
0].s = a; 
        
for(i = 1; i < n; ++i) 
            scanf(
"%d"&a); 
            
if(ext(0, a)) continue
            
else
                ins(i, 
0, a); 
        }
 
        preorder(
0); 
        puts(
""); 
        inorder(
0); 
        puts(
""); 
        postorder(
0); 
        puts(
""); 
    }
 
    
return 0
}
 
/************************************************************** 
    Problem: 1201 
    User: Uriel 
    Language: C++ 
    Result: Accepted 
    Time:100 ms 
    Memory:1024 kb 
***************************************************************
*/


4. 排序
    大水不解释
//2006年华中科技大学计算机保研机试题 二叉排序树  
#include<stdio.h> 
#include
<stdlib.h> 
#include
<string.h> 
#include
<algorithm> 
using namespace std; 
  
int a[120], n; 
  
int main() 
    
int i; 
    
while(~scanf("%d"&n)) 
        
for(i = 0; i < n; ++i) 
            scanf(
"%d"&a[i]); 
        }
 
        sort(a, a 
+ n); 
        
for(i = 0; i < n; ++i) printf("%d ", a[i]); 
        puts(
""); 
    }
 
    
return 0
}
 
/************************************************************** 
    Problem: 1202 
    User: Uriel 
    Language: C++ 
    Result: Accepted 
    Time:40 ms 
    Memory:1012 kb 
***************************************************************
*/


5. IP地址
    大水不解释
//2006年华中科技大学计算机保研机试题 IP地址  
#include<stdio.h> 
#include
<stdlib.h> 
#include
<string.h> 
  
int main() 
    
int cse, a, b, c, d; 
    scanf(
"%d"&cse); 
    
while(cse--
        scanf(
"%d.%d.%d.%d"&a, &b, &c, &d); 
        
if(a >= 0 && a <= 255 && b >= 0 && b <= 255 && c >= 0 && c <= 255 && d >= 0 && d <= 255) puts("Yes!"); 
        
else
            puts(
"No!"); 
    }
 
    
return 0
}
 
/************************************************************** 
    Problem: 1203 
    User: Uriel 
    Language: C++ 
    Result: Accepted 
    Time:10 ms 
    Memory:1012 kb 
***************************************************************
*/

Feedback

# re: 华中科技大学计算机研究生机试题-2005,2006年[未登录]  回复  更多评论   

2012-03-05 19:40 by ZAKIR
同学,貌似1199找位置那个题rejudge了,你的代码好像不行哦。
话说,那题题意不清啊,大小写字母区分不?

# re: 华中科技大学计算机研究生机试题-2005,2006年  回复  更多评论   

2012-03-05 21:44 by Uriel
@ZAKIR
是的,Rejudge了,我已经update了,现在这个代码可以AC

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理