Result: 9/10 *********t (timeout)
cowfind.cpp
#include <iostream>
#include <fstream>
#include <string>
#define loopi(x) loopi_start(x,0)
#define loopi_start(x,s) for(int i = (s); i < (x); ++i)
#define loop_rev(a,x,stop) for(int a = (x); a >= (stop); --a)
using namespace std;
int main() {
ofstream fout ("cowfind.out");
ifstream fin("cowfind.in");
// get input
string str;
fin >> str;
int locations = 0;
//)((()())())
loopi(str.length() - 3){
if(str[i] == '(' && str[i + 1] == '('){
loop_rev(j, str.length() - 1, i + 3){
if(str[j] == ')' && str[j - 1] == ')')
++locations;
}
}
}
// output
fout << locations << '\n';
// cleanup
fin.close();
fout.close();
return 0;
}
You made it too complex, while it's not! :-p
ReplyDelete/*
ID: minlite
PROG: cowfind
LANG: C++
*/
#include
#include
using namespace std;
int main() {
ofstream fout ("cowfind.out");
ifstream fin ("cowfind.in");
char in[50000];
int out = 0;
fin>>in;
for(int i=0; i<50000; i++) {
if(in[i] == '(' && in[i+1] == '(') {
for(int j=i;j<50000;j++) {
if(in[j] == ')' && in[j+1] == ')'){
out++;
}
}
}
}
fout<<out<<endl;
return 0;
}
That solution has a buffer overread, and it's prone to failure if the input is longer than 50000. std::string is safer to use.
DeleteTo be specific: in[i+1] when i = 49999.
Delete