标签:amp getchar getc oid close 小技巧 style 输入格式 splay
两个二进制数n%m的结果是多少?
两行,第一行输入一个二进制数n;第二行输入一个二进制数m。
一行,输出n%m的结果。
1010101010
111000
1010
n的长度(二进制数的位数)≤200000;
m的长度(二进制数的位数)≤20。
模拟,主要是一些优化的小技巧可以注意。
#include <cstdio> #include <cstring> char a[200005], b[25]; int len_a, len_b; void Read(char s[], int & len) { char ch = getchar(); while(ch != ‘1‘) ch = getchar(); s[0] = ‘0‘; s[1] = ch; scanf("%s", s + 2); len = strlen(s); return; } bool Compare(int idx) { for(register int i = idx - len_b + 1, j = 0; i <= idx; ++i, ++j) { if(a[i] != b[j]) return a[i] > b[j]; } return true; } void Minus(int idx) { for(register int i = idx, j = len_b - 1; j >= 0; --i, --j) { a[i] -= b[j] - ‘0‘; if(a[i] < ‘0‘) a[i] += 2, --a[i - 1]; } return; } void Write() { int p = 0; while(p + 1 < len_a && a[p] == ‘0‘) ++p; printf("%s", a + p); return; } int main() { Read(a, len_a); Read(b, len_b); for(register int i = len_b - 1; i < len_a; ++i) { if(Compare(i)) Minus(i); } Write(); return 0; }
标签:amp getchar getc oid close 小技巧 style 输入格式 splay
原文地址:https://www.cnblogs.com/kcn999/p/10354832.html