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