求助读入问题
  • 板块P1503 鬼子进村
  • 楼主Zelotz
  • 当前回复2
  • 已保存回复2
  • 发布时间2021/10/18 18:52
  • 上次更新2023/11/4 03:22:46
查看原帖
求助读入问题
347589
Zelotz楼主2021/10/18 18:52

首先,不用快读和getchar,即可ac:

#include <bits/stdc++.h>
using namespace std;
#define srand srand(time(NULL))
#define random(x) rand() % (x)
#define il inline
#define ptc putchar
#define reg register
#define mp make_pair
typedef __int128 LL;
typedef long long ll;
typedef pair<int, int> PII;
namespace cyyh {
    template <typename T>
    il void read(T &x) {
    	x = 0; T f = 1; char ch;
    	while (!isdigit(ch = getchar())) f -= (ch == '-') << 1;
        while (isdigit(ch)) x = (x << 1) + (x << 3) + (ch & 15), ch = getchar(); x *= f;
    }
    template <typename T>
    il void write(T x) {
        if (x < 0) ptc('-'), x = -x;
        if (x > 9) write(x / 10);
        ptc(x % 10 + '0');
    }
    template <typename T>
    il T lowbit(const T &x) {
        return x & -x;
    }
}
using namespace cyyh;
const int N = 5e4 + 5;
int n, T, tot, root, X, Y, Z; 
stack <int> last;
...
bool vis[N];
signed main() {
//	freopen("1.txt", "w", stdout);
    srand;
    scanf("%d%d", &n, &T);
    insert(0), insert(n + 1);
    while (T--) {
        int x;
        char op;
        cin >> op;
//		cout << op << ' ' << x << endl;
        if (op == 'D') {
			scanf("%d", &x);
        	insert(x), vis[x] = 1, last.push(x);
		} else if (op == 'R') {
			if (!last.empty()) erase(last.top()), vis[last.top()] = 0, last.pop();
		} else {
			scanf("%d", &x);
			if (vis[x]) {
				write(0), ptc('\n');
				continue;
			}
			int l = getpre(x), r = getnxt(x);
//			cout << r << ' ' << l << "!!" << endl;
			write(r - l - 1), ptc('\n');
		}
    }
    return 0;
}

将cin的op换成getchar,处理了一下空格:

signed main() {
//	freopen("1.txt", "w", stdout);
    srand;
    scanf("%d%d", &n, &T);
    insert(0), insert(n + 1);
    while (T--) {
    	getchar();
        int x;
        char op = getchar(); 
//		cout << op << ' ' << x << endl;
        if (op == 'D') {
			scanf("%d", &x);
        	insert(x), vis[x] = 1, last.push(x);
		} else if (op == 'R') {
			if (!last.empty()) erase(last.top()), vis[last.top()] = 0, last.pop();
		} else {
			scanf("%d", &x);
			if (vis[x]) {
				write(0), ptc('\n');
				continue;
			}
			int l = getpre(x), r = getnxt(x);
//			cout << r << ' ' << l << "!!" << endl;
			write(r - l - 1), ptc('\n');
		}
    }
    return 0;
}

能过样例,全re 0pts

然后把scanf换成快读,1ac,9tle

signed main() {
//	freopen("1.txt", "w", stdout);
    srand;
    read(n), read(T);
    insert(0), insert(n + 1);
    while (T--) {
        int x;
        char op = getchar(); 
//		cout << op << ' ' << x << endl;
        if (op == 'D') {
			getchar();
        	read(x);
        	insert(x), vis[x] = 1, last.push(x);
		} else if (op == 'R') {
			erase(last.top()), vis[last.top()] = 0, last.pop();
		} else {
			getchar();
			read(x);
			if (vis[x]) {
				write(0), ptc('\n');
				continue;
			}
			int l = getpre(x), r = getnxt(x);
//			cout << r << ' ' << l << "!!" << endl;
			write(r - l - 1), ptc('\n');
		}
    }
    return 0;
}

都试了一下,都能正常读入啊,为什么呢。

现在都不敢在考场上写getchar和快读了

2021/10/18 18:52
加载中...