Omówienie zadania “Kalendarze” z II etapu poprzednich edycji OIJ (https://szkopul.edu.pl/p/default/problemset/oig/3)
Link do zadania:
Zadanie omawia Jasiek Strzeszyński – zwycięzca OIJ, złoty medalista Europejskiej Olimpiady Informatycznej Juniorów
#include<bits/stdc++.h> #define fi first #define se second #define pb push_back using namespace std; int pref[2][1000010]; int size[2]; void sol(int mi,int d,bool c) { int p,k,s; d+=pref[c][mi-1]; p=1; k=size[!c]; while(p<k) { s=(p+k)/2; if(pref[!c][s]>=d) k=s; else p=s+1; } cout<<d-pref[!c][p-1]<<" "<<p<<"\n"; return; } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int n,m,z,mi,d,i; char c; cin>>n>>m; size[0]=n; size[1]=m; for(i=1;i<=n;i++) { cin>>pref[0][i]; pref[0][i]+=pref[0][i-1]; } for(i=1;i<=m;i++) { cin>>pref[1][i]; pref[1][i]+=pref[1][i-1]; } cin>>z; for(i=1;i<=z;i++) { cin>>d>>mi>>c; sol(mi,d,(c=='B')); } return 0; }