● Educational Codeforces Round 4 - A. The Text Splitting
ممد قصد دارد یک رشته کاراکتر را تکه تکه کند!
او یک رشته به نام s و به سایز n و دو عدد p و q در اختیار دارد و میخواهد s را به قطعه هایی به طول های p و q تقسیم کند. برای مثال اگر s را "Hello" در نظر بگیریم، برای p=2 و q=3 او می تواند این رشته را به دو زیر رشته ی "Hel" و "lo" تقسیم کند یا در حالتی دیگر به دو زیر رشته ی "He" و "llo" نیز می تواند.
گفتنی است لزومی ندارد که حتماً از هر دو عدد p و q استفاده کند، می تواند رشته را به تعدادی زیر رشته به طول q تقسیم کند و بلعکس. (به مثال دوم در ادامه مطلب توجه کنید)
در انجام این کار خطیر ممد را مساعدت فرمایید.
ورودی:
در خط اول ورودی، سه عدد صحیح مثبت n و p و q داده می شود.
در خط دوم یک رشته کارکتر (string) که قرار است قطعه قطعه شود وارد می شود.
n, p, q (1 ≤ p, q ≤ n ≤ 100)
خروجی:
اگر ناممکن است که رشته ی مورد نظر را به زیر رشته هایی به طول p و q تقسیم کند، فقط عدد "-1" را چاپ کنید.
در غیر این صورت در خط اول خروجی عدد k نشان دهنده ی تعداد زیر رشته ها را چاپ کنید. و در هریک از k خط بعدی یک زیر رشته را چاپ کنید که حتماً سایز آن یکی از دو عدد p یا q است.
لازم به ذکر است که ترتیب زیر رشته ها باید سازنده ی رشته ی اصلی از چپ به راست باشد؛ و در صورتی که بیش از یک جواب برای مسئله وجود دارد، چاپ هر کدام از آنها تفاوتی نمی کند.
// A Drop of the Programming Sea - adops.blog.ir#include <bits/stdc++.h> using namespace std; #define rout(n){cout << n << endl; return 0;} int main() { int n, p, q, x; string s; cin >> n >> p >> q >> s; for(int i=0 ; i<=n ; i+=p) { if((n-i)%q==0) { x=(n-i)/q; cout << i/p+x << endl; for(int j=0 ; j<i ; j+=p) cout << s.substr(j,p) <<endl; for(int j=0 ; j<x ; j++) cout << s.substr(i+q*j,q) << endl; return 0; } } rout(-1); }