Created
July 21, 2014 10:38
-
-
Save sananth12/dc6e9c1e02563b1c5004 to your computer and use it in GitHub Desktop.
Very fast IO C++
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <cstdio> | |
#include <iostream> | |
using std::string; | |
static struct IO { | |
char tmp[1 << 10]; | |
// fast input routines | |
char cur; | |
//#define nextChar() (cur = getc_unlocked(stdin)) | |
//#define peekChar() (cur) | |
inline char nextChar() { return cur = getc_unlocked(stdin); } | |
inline char peekChar() { return cur; } | |
inline operator bool() { return peekChar(); } | |
inline static bool isBlank(char c) { return (c < '-' && c); } | |
inline bool skipBlanks() { while (isBlank(nextChar())); return peekChar() != 0; } | |
inline IO& operator >> (char & c) { c = nextChar(); return *this; } | |
inline IO& operator >> (char * buf) { | |
if (skipBlanks()) { | |
if (peekChar()) { | |
*(buf++) = peekChar(); | |
while (!isBlank(nextChar())) *(buf++) = peekChar(); | |
} *(buf++) = 0; } return *this; } | |
inline IO& operator >> (string & s) { | |
if (skipBlanks()) { s.clear(); s += peekChar(); | |
while (!isBlank(nextChar())) s += peekChar(); } | |
return *this; } | |
inline IO& operator >> (double & d) { if ((*this) >> tmp) sscanf(tmp, "%lf", &d); return *this; } | |
#define defineInFor(intType) \ | |
inline IO& operator >>(intType & n) { \ | |
if (skipBlanks()) { \ | |
int sign = +1; \ | |
if (peekChar() == '-') { \ | |
sign = -1; \ | |
n = nextChar() - '0'; \ | |
} else \ | |
n = peekChar() - '0'; \ | |
while (!isBlank(nextChar())) { \ | |
n += n + (n << 3) + peekChar() - 48; \ | |
} \ | |
n *= sign; \ | |
} \ | |
return *this; \ | |
} | |
defineInFor(int) | |
defineInFor(unsigned int) | |
defineInFor(long long) | |
// fast output routines | |
//#define putChar(c) putc_unlocked((c), stdout) | |
inline void putChar(char c) { putc_unlocked(c, stdout); } | |
inline IO& operator << (char c) { putChar(c); return *this; } | |
inline IO& operator << (const char * s) { while (*s) putChar(*s++); return *this; } | |
inline IO& operator << (const string & s) { for (int i = 0; i < (int)s.size(); ++i) putChar(s[i]); return *this; } | |
char * toString(double d) { sprintf(tmp, "%lf%c", d, '\0'); return tmp; } | |
inline IO& operator << (double d) { return (*this) << toString(d); } | |
#define defineOutFor(intType) \ | |
inline char * toString(intType n) { \ | |
char * p = (tmp + 30); \ | |
if (n) { \ | |
bool isNeg = 0; \ | |
if (n < 0) isNeg = 1, n = -n; \ | |
while (n) \ | |
*--p = (n % 10) + '0', n /= 10; \ | |
if (isNeg) *--p = '-'; \ | |
} else *--p = '0'; \ | |
return p; \ | |
} \ | |
inline IO& operator << (intType n) { return (*this) << toString(n); } | |
defineOutFor(int) | |
defineOutFor(long long) | |
#define endl ('\n') | |
#define cout __io__ | |
#define cin __io__ | |
} __io__; | |
int main() | |
{ | |
int N, K, ans = 0; | |
for (cin >> N >> K; N--;) | |
{ | |
register int a; | |
cin >> a; | |
if (a % K == 0) | |
ans++; | |
} | |
cout << ans << endl; | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment