微软2014实习生及秋令营技术类职位在线测试返回比赛列表

只做了两个,第一个90分(实在想不出错在哪里...谁能给个测试用例不?),第二个40分(其实已经发现问题了,等要再改时间不够失去修改的动力了...)

题目1 : String reorder
思路是:HASH计数,按计数排序输出

#include <iostream>
#include <string>
using namespace std;
int num[10];
int alpha[26];
void init()
{
     for(int i=0;i<10;i++)
     {
             num[i]=0;
     }
     for(int i=0;i<26;i++)
     {
             alpha[i]=0;
     }
     
}
void output(int size)
{
     while(size){
         for(int i=0;i<10;i++)
         {
                 if(num[i]>0)
                 {
                             cout<<i;
                             num[i]--;
                             size--;
                 }
         }
         for(int i=0;i<26;i++)
         {
                  if(alpha[i]>0)
                 {
                             cout<<(char)('a'+i);
                             alpha[i]--;
                             size--;
                 }
         }
     }
     if(size==0)
                cout<<endl;
}
void func()
{
     string s;
     while(cin>>s)
     {
       init();
       bool flag=true;
       int size=s.size();
       for(int i=0;i<s.size();i++)
       {
               if(s[i]>='0'&&s[i]<='9')
               {
                 num[s[i]-'0']++;
               }else
               if(s[i]>='a'&&s[i]<='z')
               {
                  alpha[s[i]-'a']++;                     
               }else
               {
                    flag=false;
               }
               
       }
       if(flag==false)
       {
                      cout<<"<invalid input string>"<<endl;
       }
       else
       {
           output(size);
       }
     }
    
    //getchar();
 
}
int main(int argc, char *argv[])
{
    
	//printf("Hello, world\n");
	func();
	return 0;
}



题目2 : K-th string
思路:

1可以考虑全排列,将重复的剔除,然后排序输出(一上来想到的方法,结果自己看了下m+n,k数字,怕太大,没这样写下去 ....)

2考虑000011111,111110000最小,最大值,这两个范围的整数,从最小值顺序遍历到最大值,利用其含二进制1的个数判断是否为m,来确定是否属于该string集合,然后数到第k个

3考虑从000011111,按照字典序依次递增到111110000(我最后选择了这个思路,但没有写完整,如果在保持01个数的情况下形成字典序,需要找到规律对01进行swap)// by zjerry 待补充

题目3 : Reduce inversion count

思路:
1按例子上的说明最直接的想法是,每swap两个数字后就计算一下逆序数(或者只计算 这两个数和他们之间的数的逆序数变化),然后求出最小值(看了题目,没有动笔...稍微想了下因为swap两个数字是组合O(n^2),然后求逆序数至少也要O(nlogn),这...我又怕超时没敢写)
2

题目4 : Most Frequent Logs


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值