鱼C论坛

 找回密码
 立即注册
12
返回列表 发新帖
楼主: zhangjinxuan

[已解决]【C++板块提升计划】梦想护卫舰 第14期 取余

[复制链接]
发表于 2023-1-26 20:45:14 | 显示全部楼层
decimal行不行
  1. import decimal
  2. a, b = map(int, input().split())
  3. print(int(decimal.Decimal(a) % decimal.Decimal(b)))
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-1-26 21:27:28 | 显示全部楼层

一帮老六
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-26 21:44:29 | 显示全部楼层
现在能看到(一部分)之前经历了长时间审核的回复了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-1-26 21:46:38 | 显示全部楼层
人造人 发表于 2023-1-26 12:17
你有什么话要说吗?
^_^

有!
你们这帮老六
  1. [Error] boost/multiprecision/cpp_int.hpp: No such file or directory
复制代码

我才那个老六吧

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-1-26 21:47:12 | 显示全部楼层
sfqxx 发表于 2023-1-26 19:29
自己选????

呵呵
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-1-26 21:47:52 | 显示全部楼层

(感觉我是不是有点过分了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-1-26 21:52:24 | 显示全部楼层
dolly_yos2 发表于 2023-1-26 15:31
应该是不需要高精度的
版本一(任意输入方式):
版本二(需要将输入重定向到文件):

不错不错,我很满意

(测试的时候我顺便写了个数据生成器上去,结果超时了,排查一下发现是数据生成器超时了,哈哈哈)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-1-26 21:52:59 | 显示全部楼层
dolly_yos2 发表于 2023-1-26 19:37
第21行是不是也有一点问题?

明天再评分吧,今天用完了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-26 21:53:43 | 显示全部楼层
zhangjinxuan 发表于 2023-1-26 21:46
有!
你们这帮老六

^_^
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-1-26 22:02:45 | 显示全部楼层

太大 decimal 就崩了(是不是我操作错了,我没用过
  1. decimal.InvalidOperation: [<class 'decimal.DivisionImpossible'>]
复制代码

输入数据:
  1. 7565521721998976389927665831246144538921968281367235378722916219634739798727419319539391588679818592277666374722947419138792565464137328872349233178547958481656738439975357856148634247733446987756315879633952797512872145816425352818178249817618781439875717698133717912462318749761975695197526421242444711682118786267513331389328134665148473613491636727372866995863146431871535827823456288992432978864725938444874878677169753171511496329225657884249393715984636369864646899989965376515865792623613682958673541987281228861322936131615789374839753239945848124959465276383638912345255821822173695668862137631714722212386872391833643812779935843986553388133312455182377829843822421655897183957681387187486693176878979516984985271441188192655461994761434483469848167914647387631398168272618139754257894646498585977842364261194959477788649569954295633459972517429867384168541294112118359268455273499999455767741989459846291678329649697848841314917576391132422724454573757562782668489386363411845549146215341 3158
复制代码

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-26 22:10:13 | 显示全部楼层
zhangjinxuan 发表于 2023-1-26 22:02
太大 decimal 就崩了(是不是我操作错了,我没用过

输入数据:

?
正确答案是多少?
这是什么意思?
  1. sh-5.1$ time ./main <<EOF
  2. > 7565521721998976389927665831246144538921968281367235378722916219634739798727419319539391588679818592277666374722947419138792565464137328872349233178547958481656738439975357856148634247733446987756315879633952797512872145816425352818178249817618781439875717698133717912462318749761975695197526421242444711682118786267513331389328134665148473613491636727372866995863146431871535827823456288992432978864725938444874878677169753171511496329225657884249393715984636369864646899989965376515865792623613682958673541987281228861322936131615789374839753239945848124959465276383638912345255821822173695668862137631714722212386872391833643812779935843986553388133312455182377829843822421655897183957681387187486693176878979516984985271441188192655461994761434483469848167914647387631398168272618139754257894646498585977842364261194959477788649569954295633459972517429867384168541294112118359268455273499999455767741989459846291678329649697848841314917576391132422724454573757562782668489386363411845549146215341 3158
  3. > EOF
  4. 1247

  5. real        0m0.064s
  6. user        0m0.021s
  7. sys        0m0.013s
  8. sh-5.1$
复制代码


这对吗?这不对吧?0.064秒你敢信?
这个规模的数字0.064秒?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-1-26 22:16:02 | 显示全部楼层
人造人 发表于 2023-1-26 22:10
?
正确答案是多少?
这是什么意思?

w h a t
我这使用数据生成器瞎搞出来的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-1-26 22:17:56 | 显示全部楼层
人造人 发表于 2023-1-26 22:10
?
正确答案是多少?
这是什么意思?

正确答案真是1247
(优美的话语)
估计这个库也使用了像我这样类似的算法?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-26 22:23:46 | 显示全部楼层
zhangjinxuan 发表于 2023-1-26 22:16
w h a t
我这使用数据生成器瞎搞出来的

你有没有夸张点的数字(像上面那样的),并且是知道答案的
我想试试这个程序能不能给出正确答案,^_^
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-27 10:59:52 | 显示全部楼层
zhangjinxuan 发表于 2023-1-26 22:17
正确答案真是1247
(优美的话语)
估计这个库也使用了像我这样类似的算法?

很可能是因为数据不够大,毕竟只有 A 只有1000位
下面的测试里 A 恰好有 1e7 位,而 B 是 1999999999
  1. $ cat test.cpp                                
  2. #include <iostream>
  3. #include <boost/multiprecision/cpp_int.hpp>

  4. using boost::multiprecision::cpp_int;

  5. int main() {
  6.     cpp_int a, b;
  7.     std::cin >> a >> b;
  8.     std::cout << a % b << std::endl;
  9.     return 0;
  10. }%                                                                                                                                                                                                                                                                          
  11. $ clang++ test.cpp
  12. $ /usr/bin/time -p timeout -v 0.5s ./a.out < input
  13. timeout: sending signal TERM to command ‘./a.out’
  14. real 0.50
  15. user 0.49
  16. sys 0.00
  17. $ cat test2.cpp                              
  18. #include <iostream>
  19. #include <string>
  20. int main(){
  21.     std::string a;
  22.     uint64_t b;
  23.     uint64_t result = 0;
  24.     std::cin >> a >> b;
  25.     for(const auto c: a){
  26.         result = ((result << 3) + (result << 1) + (c - '0')) % b;
  27.     }
  28.     std::cout << result;
  29.     return 0;
  30. }%                                                                                                                                                                                                                                                                          
  31. $ clang++ test2.cpp                              
  32. $ /usr/bin/time -p timeout -v 0.5s ./a.out < input
  33. 1313860644
  34. real 0.13
  35. user 0.13
  36. sys 0.00
  37. $ cat test3.cpp                                   
  38. #include <cstdio>
  39. #include <cstring>

  40. char a[10000005];
  41. int n, p;

  42. long long eval_ans() {
  43.         long long x = 1, avalue = 0;
  44.         for (int i = n; i >= 1; --i) {
  45.                 long long ap = (long long)(a[i] - '0') * x;
  46.                 ap %= p;
  47.                 avalue += ap;
  48.                 avalue %= p;
  49.                 x *= 10;
  50.                 x %= p;
  51.         }
  52.         return avalue;
  53. }

  54. int main() {
  55.         scanf("%s%d", a + 1, &p);
  56.         n = strlen(a + 1);
  57.         printf("%lld", eval_ans());
  58. }
  59. $ clang++ test3.cpp                              
  60. $ /usr/bin/time -p timeout -v 0.5s ./a.out < input
  61. 1313860644
  62. real 0.07
  63. user 0.07
  64. sys 0.00
  65. $ cat test.c
  66. #include <unistd.h>
  67. #include <sys/stat.h>
  68. #include <sys/types.h>
  69. int main(){
  70.     enum{ BufferSize = 1024 };
  71.     struct stat status;
  72.     unsigned char buffer[BufferSize];
  73.     ssize_t effective_length;
  74.     if(fstat(STDIN_FILENO, &status) == -1){
  75.         return 1;
  76.     }
  77.     off_t seek_offset = status.st_size > 11 ? -11 : -status.st_size;
  78.     if(lseek(STDIN_FILENO, seek_offset, SEEK_END) == -1){
  79.         return 1;
  80.     }
  81.     effective_length = read(STDIN_FILENO, buffer, BufferSize);
  82.     unsigned long b = 0;
  83.     ssize_t i = 0;
  84.     while(buffer[i++] != ' ');
  85.     while(i < effective_length && buffer[i] >= '0' && buffer[i] <= '9'){
  86.         b = (b << 3) + (b << 1) + (buffer[i++] - '0');
  87.     }
  88.     lseek(STDIN_FILENO, 0, SEEK_SET);
  89.     unsigned long result = 0;
  90.     effective_length = i = 0;
  91.     while(1){
  92.         effective_length = read(STDIN_FILENO, buffer, BufferSize);
  93.         for(i = 0; i < effective_length; i++){
  94.             if(buffer[i] == ' ') goto end;
  95.             result = ((result << 3) + (result << 1) + (buffer[i] - '0')) % b;
  96.         }
  97.     }
  98.     end:
  99.     i = 12;
  100.     effective_length = 0;
  101.     if(result == 0){
  102.         effective_length = 1;
  103.         buffer[i--] = '0';
  104.     }
  105.     while(result){
  106.         effective_length++;
  107.         buffer[i--] = (result % 10) + '0';
  108.         result /= 10;
  109.     }
  110.     write(STDOUT_FILENO, buffer + i + 1, effective_length);
  111.     return 0;
  112. }%                                                                                                                                                                                                                                                                          
  113. $ clang test.c
  114. $ /usr/bin/time -p timeout -v 0.5s ./a.out < input
  115. 1313860644
  116. real 0.03
  117. user 0.02
  118. sys 0.00
复制代码

评分

参与人数 1荣誉 +5 鱼币 +5 收起 理由
zhangjinxuan + 5 + 5 鱼C有你更精彩^_^

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-22 19:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表