NC218580. 喜欢整除的磊哥
描述
输入描述
第一行一个正整数,表示测试的组数。
接下来每组三行:
第一行一个正整数表示。
第二行一个整数表示的长度。
第三行一个整数表示。
输出描述
第一行一个正整数表示修改的次数。
接下来k行每行两个数,表示将的第位的数字修改为。
应该满足。
如果有多种答案,输出任意一种满足的即可。
示例1
输入:
3 2 2 49 1231 7 0160271 77283 2 12
输出:
1 2 2 3 2 0 3 5 5 4 2 2 0 1 0
说明:
是的倍数(倍)。
C++(clang++11) 解法, 执行用时: 130ms, 内存消耗: 11156K, 提交时间: 2021-03-28 01:26:43
#include<bits/stdc++.h> #define int long long const int N=1e6+10; using namespace std; char s[N]; signed main() { ios::sync_with_stdio(false); cin.tie(0);cout.tie(0); int t; cin>>t; while(t--) { int n,x,i; cin>>x>>n>>s+1; int sum=0; for(i=1;i<=n;i++) sum=(sum*10+s[i]-'0')%x; int k=0,a=x; while(a) { k++; a/=10; } int tot=0; for(i=max(1LL,n-k+1);i<=n;i++) tot=tot*10+s[i]-'0'; int cha=(tot-sum+x)%x; cout<<min(k,n)<<endl; for(i=1;i<=min(k,n);i++) { cout<<n-i+1<<" "<<cha%10<<endl; cha/=10; } } return 0; }