1. C++ / Говнокод #3519

    +152

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    #include <fstream>
    using namespace std;
    #define ES EXIT_SUCCESS
    #define FOR(i___,___n) for (int i___=0; i___<(int)___n; i___++)
    #define RFOR(i__,__n,_n)  for (int i__=__n; i__>=_n; i__--)
    #define or(i__,__s) fstream i__((char*)__s)
    #define ow(i__,__s) ofstream i__((char*)__s)
    #define MEM(a,b) a=new char[b]
    #define MEM1(a,b) a=new char*[b]
    #define RFOR1(i__,_i,__n,_n)  for (int i__=__n,  _i=_n; i__>=_n; i__--,_i++)
    int N,L,D;
    char **F, *W;
    int main()
    {	
    	or(in,"input.txt");	ow(out,"output.txt");
    	in>>N>>L>>D;
    	MEM(W,N),MEM1(F,N+1), in.get();
    	FOR(i,N-L+1)	W[i]='0';
    	FOR(i,L) W[N-L+i]=in.get();
    	FOR(i,N+1)	MEM(F[i],2), F[i][0]=F[i][1]=0;
    	F[0][0]=1;
    	RFOR1(j,i,N-1,0)
    		if (W[j]=='0')
    			F[i+1][1]=F[i][1],	F[i+1][0]=(F[i][0] + F[i][1])%D;
    		else
    			F[i+1][1]=(F[i][1] +F[i][0])%D,	F[i+1][0]=F[i][0];
    	out<<(int)F[N][0];
    	return ES;
    }

    Запостил: jte, 20 Июня 2010

    Комментарии (2) RSS

    • Красотища! Ещё чуть-чуть и Фортран или Бейсик получим.
      Раньше никогда не думал, что вместо операторных скобок можно использовать запятую. Читается код не очень хорошо, всё-таки скобки ограничивали бы ветвь.
      Поскольку «Macros are evil», как написано в http://www.parashift.com/c++-faq-lite/misc-technical-issues.html, то лучше в правой части #define переменные брать в скобки. Здесь, к счастью, N-1 в качестве параметра макроса проходит, а бывают случаи, когда это приводит к трудноуловимым ошибкам.
      Ответить
    • [:|||||||:]
      Ответить

    Добавить комментарий