Atcoder arc 084 D - Small Multiple(双向队列+抽屉原理)

该博客主要介绍了如何利用双向队列和抽屉原理来解决Atcoder在线编程竞赛中ARC084D题目的详细过程。题目要求找到最小的正整数倍数K的十进制表示中数字之和。博客内容包括问题陈述、约束、输入输出示例,并提到在暴力求解失败后,通过学习他人的解决方案了解到双向队列在问题解决中的应用。
摘要由CSDN通过智能技术生成

题目链接:http://arc084.contest.atcoder.jp/tasks/arc084_b


D - Small Multiple


Time limit : 2sec / Memory limit : 256MB

Score : 700 points

Problem Statement

Find the smallest possible sum of the digits in the decimal notation of a positive multiple of K.

Constraints

本段代码的错误在于输入顶点信息时,使用了 scanf() 函数读取字符,但是在输入完顶点数和边数后,输入缓冲区中可能会残留一个换行符,导致输入顶点信息时会先读取到这个换行符,而不是用户输入的第一个字符。为了解决这个问题,可以在读取顶点信息前先用 getchar() 函数读取掉输入缓冲区中的换行符,代码修改如下: ```c void CreateMGraph(MGraph* G) { int i, j, k, w; char a, b; printf("输入顶点数和边数:\n"); scanf("%d,%d", &G->numNodes, &G->numEdges); /* 输入顶点数和边数 */ printf("输入顶点信息:\n"); getchar(); // 读取掉输入缓冲区中的换行符 for (i = 0; i < G->numNodes; i++) /* 读入顶点信息,建立顶点表 */ scanf("%c", &G->vexs[i]); for (i = 0; i < G->numNodes; i++) for (j = 0; j < G->numNodes; j++) G->arc[i][j] = GRAPH_INFINITY; /* 邻接矩阵初始化 */ fflush(stdin); for (k = 0; k < G->numEdges; k++) /* 读入numEdges条边,建立邻接矩阵 */ { printf("输入第%d条边(格式为:顶点a,顶点b,权值)\n ",k+1); scanf(" %c %c %d", &a, &b, &w); // 在格式字符串前加空格,将之前的换行符读取掉 for (i = 0; i < G->numNodes; i++) { for(j = 0; j < G->numNodes; j++) { if(G->vexs[i] == a && G->vexs[j] == b) { G->arc[i][j] = w; G->arc[j][i] = w; } } } } } ``` 另外,建议在输入完顶点数和边数后,也加上一个 getchar() 函数,将输入缓冲区中的换行符读取掉,以免对后面的输入造成影响。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值