【題解】二進制取模
阿新 • • 發佈:2019-02-07
write har gis compare etc turn 程序 splay cstring
題目描述
兩個二進制數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 inti = 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; }
【題解】二進制取模