语法问题 萌新求助
查看原帖
语法问题 萌新求助
218405
_CHO楼主2020/8/5 16:11

RT,这样写就时0pts

string s;
getline(cin,s);

这样就AC了

string s;
cin>>s;

这两种写法有啥区别啊QAQ

附完整代码

#include <bits/stdc++.h>
using namespace std;
const int maxn = 6e+4+100;
struct Node{
	int l,r,id;
};
int n,m,siz;
int l=1,r=0;
int a[maxn],block[maxn],pre[maxn];
Node q[maxn];
int res,cnt[(1<<26)+100],ans[maxn];

int read(){
	int v=0,f=1;char ch=getchar();
	while(ch<'0'||ch>'9'){if(ch=='-') f = -f; ch=getchar();}
	while(ch>='0'&&ch<='9'){v=(v<<3)+(v<<1)+ch-48;ch=getchar();}
	return v*f;
}
bool cmp(Node x,Node y){
	return block[x.l]==block[y.l]?x.r<y.r:block[x.l]<block[y.l];
}
void init(){
	string s;
	cin>>s;
	for(int i=1;i<=s.size();++i){
		a[i] = s[i-1] - 65;
		pre[i] = pre[i-1] ^ (1<<a[i]);
		block[i] = (i-1)/siz +1;
	}
	return ;
}
void Add(int x){
	res += cnt[pre[x]];
	for(int i=0;i<26;++i) res+=cnt[pre[x]^(1<<i)];
	cnt[pre[x]]++;
}
void Sub(int x){
	cnt[pre[x]]--;
	res-=cnt[pre[x]];
	for(int i=0;i<26;++i) res-=cnt[pre[x]^(1<<i)];
}
int main(){
	n=read();m=read();
	siz = 3*sqrt(n);
	init();
	for(int i=1;i<=m;++i){
		q[i].l=read()-1;q[i].r=read();
		q[i].id = i;
	}
	sort(q+1,q+m+1,cmp);
	for(int i=1;i<=m;++i){
		Node t = q[i];
		while(t.l<l) Add(--l);
		while(t.l>l) Sub(l++);
		while(t.r<r) Sub(r--); 
		while(t.r>r) Add(++r);
		ans[t.id] = res;
	}
	for(int i=1;i<=m;++i) printf("%d\n",ans[i]);
	return 0;
}

2020/8/5 16:11
加载中...