fzu2223
2016-04-20 16:20
288 查看
#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; }
相关文章推荐
- iOS UIScrollView 下拉刷新
- Android内存优化之OOM
- 第八周项目1——(2)数组做数据成员
- Oracle ALL, ANY and SOME比较
- 应用程序报错信息
- 通过计算获得一个使用最少量充值卡满足充值额度的方案
- linux搭建可用实验环境-rhel7
- [经典] 回文问题(二)
- 深入理解css属性的选择对动画性能的影响
- windows下设置redis密码
- Android关闭USB的ADB调试和文件传输功能(禁用USB)
- cookie
- zlib剖析(四)
- HDU 1846 Brave Game
- 第8周项目2:用对象数组操作长方柱类
- MySQL启动报“[Warning] Buffered warning: Changed limits: max_open_files: 1024 (requested 15000)”
- Android性能优化之内存篇
- ”Android资源文件匹配“调研
- 弱口令/敏感后台
- CI 笔记4 (easyui 手风琴)