Submission #3245894


Source Code Expand

#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
#include<algorithm>
#include<queue>
#include<cmath>
#include<cstdlib>
#include<set>
#define LL long long
#define LD long double
using namespace std;
const int NN=250000 +117;
const int MM= +117;
#define mod1 998244353
#define mod2 1004535809
int read(){
	int fl=1,x;char c;
	for(c=getchar();(c<'0'||c>'9')&&c!='-';c=getchar());
	if(c=='-'){fl=-1;c=getchar();}
	for(x=0;c>='0'&&c<='9';c=getchar())
		x=(x<<3)+(x<<1)+c-'0';
	return x*fl;
}
void open(){
	freopen("99f.in","r",stdin);
	//freopen(".out","w",stdout);
}
void close(){
	fclose(stdin);
	fclose(stdout);
}
 
 
int m,n;
multiset<LL> a;
char s[NN]={};
LL ksm(LL a,LL b){
	LL ret=1;
	while(b){
		if(b&1){
			ret*=a;
			ret%=mod1;
		}
		a*=a;
		a%=mod1;
		b>>=1;
	}
	return ret;
}
int main(){
	//open();
	n=read();
	scanf("%s",s);
	LL res=0;
	LL rev=ksm(mod2,mod1-2);
	LL p=1;
	for(int i=0;i<n;++i){
		if(s[i]=='+'){
			res+=p;
			res%=mod1;
		}
		if(s[i]=='-'){
			res+=mod1-p;
			res%=mod1;
		}
		if(s[i]=='<'){
			p*=rev;
			p%=mod1;
		}
		if(s[i]=='>'){
			p*=mod2;
			p%=mod1;
		}
	}
	p=1;
	LL tp=0;
	LL ans=0;
	for(int i=0;i<n;++i){
		a.insert((tp+p*res)%mod1);
		if(s[i]=='+'){
			tp+=p;
			tp%=mod1;
		}
		if(s[i]=='-'){
			tp+=mod1-p;
			tp%=mod1;
		}
		if(s[i]=='<'){
			p*=rev;
			p%=mod1;
		}
		if(s[i]=='>'){
			p*=mod2;
			p%=mod1;
		}
		ans+=a.count(tp);
	}
	printf("%lld\n",ans);
	close();
	return 0;
}

Submission Info

Submission Time
Task C - Minimization
User Hercier
Language C++14 (GCC 5.4.1)
Score 0
Code Size 1543 Byte
Status WA
Exec Time 2103 ms
Memory 1408 KB

Compile Error

./Main.cpp: In function ‘void open()’:
./Main.cpp:26:29: warning: ignoring return value of ‘FILE* freopen(const char*, const char*, FILE*)’, declared with attribute warn_unused_result [-Wunused-result]
  freopen("99f.in","r",stdin);
                             ^
./Main.cpp: In function ‘int main()’:
./Main.cpp:54:15: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
  scanf("%s",s);
               ^

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 0 / 300
Status
WA × 3
WA × 8
TLE × 8
Set Name Test Cases
Sample sample1.txt, sample2.txt, sample3.txt
All sample1.txt, sample2.txt, sample3.txt, 1.txt, 10.txt, 2.txt, 3.txt, 4.txt, 5.txt, 6.txt, 7.txt, 8.txt, 9.txt, sample1.txt, sample2.txt, sample3.txt
Case Name Status Exec Time Memory
1.txt TLE 2103 ms 1408 KB
10.txt TLE 2103 ms 1408 KB
2.txt TLE 2103 ms 1408 KB
3.txt TLE 2103 ms 1408 KB
4.txt TLE 2103 ms 1408 KB
5.txt TLE 2103 ms 1408 KB
6.txt TLE 2103 ms 1408 KB
7.txt WA 170 ms 640 KB
8.txt TLE 2103 ms 1408 KB
9.txt WA 4 ms 256 KB
sample1.txt WA 1 ms 256 KB
sample2.txt WA 1 ms 256 KB
sample3.txt WA 1 ms 256 KB