Omówienie zadania „Lampy” z Wrocławskich Sparingów Informatycznych:
https://youtu.be/OafWtKkbGmw?t=6498
oraz omówienie tego zadania na zajęciach Wrocławskich Sparingów Informatycznych:
https://youtu.be/uBK5xeP5voA
oraz omówienie tego zadania na zajęciach Wrocławskich Sparingów Informatycznych:
https://youtu.be/uBK5xeP5voA
#include<bits/stdc++.h> using namespace std; bool StanLampy[1000010]; // 0-zgaszona 1-zapalona int main() { int n,MinZapalonych=0,AktZapalonych,i=1; //wczytuje dane : char lampa; while((lampa=getchar())!='\n'){ if(lampa=='#') //lampa jest zapalona StanLampy[i]=1; else // lampa jest zgaszona StanLampy[i]=0; MinZapalonych+=StanLampy[i]; i++; } n=i-1; // n-liczba lamp //wciskamy tylko przycisk 1: AktZapalonych=0; for(i=1;i<=n;i++){ if(i%2==0) AktZapalonych+=!StanLampy[i]; // dla niewtajemniczonych ! to symbol negacji else // !0=1 !1=0 -odpowiada to zmianie stanu lampy AktZapalonych+=StanLampy[i]; // o numerze parzystym na stan przeciwny } MinZapalonych=min(MinZapalonych,AktZapalonych); //wciskamy tylko przycisk 2: AktZapalonych=0; for(i=1;i<=n;i++){ if(i%2) AktZapalonych+=!StanLampy[i]; else AktZapalonych+=StanLampy[i]; } MinZapalonych=min(MinZapalonych,AktZapalonych); //wciskamy tylko przycisk 3: AktZapalonych=0; for(i=1;i<=n;i++){ if(i%3==0) AktZapalonych+=!StanLampy[i]; else AktZapalonych+=StanLampy[i]; } MinZapalonych=min(MinZapalonych,AktZapalonych); //wciskamy przyciski 1 i 2: AktZapalonych=0; for(i=1;i<=n;i++) AktZapalonych+=!StanLampy[i]; //wciśnięcie przycisku 1 i 2 jest równoważne zmianie stanu wszystkich lamp MinZapalonych=min(MinZapalonych,AktZapalonych); //wciskamy przyciski 1 i 3: AktZapalonych=0; for(i=1;i<=n;i++){ if(((i%2==0)&&(i%3))||((i%2)&&(i%3==0))) // jeżeli lampa ma numer podzielny przez 2, ale niepodzielny przez 3 AktZapalonych+=!StanLampy[i]; // lub niepodzielny przez 2, ale podzielny przez 3, to zmienia swój stan else AktZapalonych+=StanLampy[i]; } MinZapalonych=min(MinZapalonych,AktZapalonych); //wciskamy przyciski 2 i 3: AktZapalonych=0; for(i=1;i<=n;i++){ if(((i%2)&&(i%3))||((!(i%2))&&(!(i%3)))) // jeżeli lampa ma numer niepodzielny przez 2 i niepodzielny przez 3 AktZapalonych+=!StanLampy[i]; // lub podzielny przez 2, i podzielny przez 3, to zmienia swój stan else AktZapalonych+=StanLampy[i]; } MinZapalonych=min(MinZapalonych,AktZapalonych); //wciskamy wszystkie przyciski AktZapalonych=0; for(i=1;i<=n;i++){ if(i%3==0) AktZapalonych+=StanLampy[i]; // wciskając przyciski 2 i 3 odwracamy stany wszystkich lamp else // wtedy przycisk 3 zmienia stan lamp o numerach podzielnych AktZapalonych+=!StanLampy[i]; // przez 3 na początkowy } MinZapalonych=min(MinZapalonych,AktZapalonych); cout<<MinZapalonych<<"\n"; }