fzu2223

来源:互联网 发布:大数据岗位 编辑:程序博客网 时间:2024/06/03 21:23

#include <iostream>#include <string>#include <string.h>#include <vector>#include <stdio.h>#include <algorithm>#include <map>typedef long long LL ;namespace  MyMap{    const static int  MOD = 1000007  ;    int  head[MOD] ;    LL   val[MOD] ;    int  next[MOD] ;    int  to[MOD] ;    int  size  ;    void clear(){        memset(head , -1 , sizeof(head)) ;        size = 0 ;    }    int find(LL x){        long u = (x % MOD + MOD) % MOD ;        for(int i = head[u] ; i != -1 ; i = next[i]){            if(val[i] == x) return to[i] ;        }        return -1 ;    }    void  insert(LL x , int y){        int u = (x % MOD + MOD) % MOD ;        val[size] = x ;        to[size] = y ;        next[size] = head[u] ;        head[u] = size++ ;    }};void gao(LL n , LL m){     if(n % m == 0){         printf("%I64d\n" , n / m) ;         return ;     }     std::vector<char> res ;     MyMap::clear() ;     int resSize = 0 ;     LL d = n / m ;     if(d == 0) res.push_back('0') ;     while(d){        res.push_back( (d%10) + '0' ) ;        d /= 10 ;     }     std::reverse(res.begin() , res.end()) ;     res.push_back('.');     int idx = 0 ;     n %= m ;     while(MyMap::find(n) == -1){        MyMap::insert(n , idx++)  ;        n *= 10 ;        res.push_back( (n/m) + '0' ) ;        if(res.size() > 1000000){            puts("Too long") ;            return ;        }        n %= m ;        if(n == 0) break ;     }     if(n > 0){        int lenth = idx - MyMap::find(n)  ;        int i = res.size()  - lenth ;        res.insert(res.begin() + i , '(') ;        res.push_back( ')' ) ;     }     if(res.size() > 1000000){        puts("Too long") ;        return ;     }     for(std::vector<char>::iterator it = res.begin() ; it != res.end() ; it++)        putchar(*it) ;     putchar('\n') ;}int main(){    LL n , m ;    int t ;    std::cin>>t ;    while(t--){        std::cin>>n>>m ;        gao(n , m) ;    }    return 0;}


string + 操作太慢,用string超时


#include <iostream>#include <string>#include <string.h>#include <vector>#include <stdio.h>#include <algorithm>#include <map>typedef long long LL ;//std::map<int , int> re ;std::string intTostring(LL n){    if(n == 0) return "0" ;    std::string s = "" ;    while(n){        char c = (n%10) + '0' ;        s = c + s ;        n /= 10 ;    }    return s ;}struct  MyMap{       const int  MOD = 1000007  ;       LL   val[MOD+8] ;       int  head[MOD+8] ;       int  next[MOD+8] ;       int  to[MOD+8] ;       int  size  ;        void clear(){               memset(head , -1 , sizeof(head)) ;               size = 0 ;       }        int  find(LL x){               long u = (x % MOD + MOD) % MOD ;               for(int i = head[u] ; i != -1 ; i = next[i]){                     if(val[i] == x) return to[i] ;               }               return -1 ;       }        void  insert(LL x , int y){               int u = (x % MOD + MOD) % MOD ;               val[size] = x ;               to[size] = y ;               next[size] = head[u] ;               head[u] = size++ ;       }};MyMap re ;std::string gao(LL n , LL m){     if(n % m == 0){        return  intTostring(n/m) ;     }     re.clear() ;     std::string res ;     res += intTostring(n/m) ;     res += "." ;     int idx = 0 ;     n %= m ;     while(re.find(n) == -1){        re.insert(n , idx++ )  ;        n *= 10 ;        res += intTostring(n/m) ;        if(res.length() > 1000000)            return "Too long" ;        n %= m ;        if(n == 0) break ;     }     if(n > 0){        int lenth = idx - re.find(n)  ;        int i = res.length() - lenth ;        res.insert(res.begin() + i , '(') ;        res += ")" ;     }     if(res.length() > 1000000)            return "Too long" ;     return res ;}int main(){    LL n , m ;    int t ;    std::cin>>t ;    while(t--){        std::cin>>n>>m ;        printf("%s\n" , gao(n , m).c_str()) ;    }    return 0;}




0 0
原创粉丝点击