#3110: 請問還有哪裡可以修改的


panruru1224 (13K)

學校 : 臺北市立松山高級中學
編號 : 10199
來源 : [118.166.221.140]
最後登入時間 :
2011-09-01 00:52:35
d017. AB Circle -- ZHENGJianqiang | From: [220.136.30.115] | 發表日期 : 2009-12-26 11:48

#include<iostream>
#include<string>
using namespace std;

int main(){
    string str;
    int cnt=1;
    while(cin >> str){
        cout << "AB Circle #" << cnt++ << ":" << endl;
        int ac=0,bc=0,ta=0,tb=0,length=str.length();
        for(int i=0;i<length;++i)
            if(str[i]=='a')
                ++ta;
        tb=length-ta;
        for(int i=0;i<length;++i){
            for(int j=i+1;j<length;++j){
                for(int k=j-1;k<j;++k)
                    if(str[k]=='a')
                        ++ac;
                bc=j-i-ac;
                if(ac==tb-bc || bc==ta-ac)
                    cout << i << "," << j << endl;
            }
        }
    }
    return 0;
}

 

演算法應該不難懂...

 可是跑出來都要9xxms,

 不知道還有哪裡可以修改的...

 
#3114: Re:請問還有哪裡可以修改的


leopan0922 (zz)

學校 : 臺北市立成功高級中學
編號 : 6612
來源 : [140.113.225.106]
最後登入時間 :
2016-08-15 15:44:07
d017. AB Circle -- ZHENGJianqiang | From: [219.70.170.140] | 發表日期 : 2009-12-26 16:46

#include
#include
using namespace std;

int main(){
    string str;
    int cnt=1;
    while(cin >> str){
        cout << "AB Circle #" << cnt++ << ":" << endl;
        int ac=0,bc=0,ta=0,tb=0,length=str.length();
        for(int i=0;i            if(str[i]=='a')
                ++ta;
        tb=length-ta;
        for(int i=0;i            for(int j=i+1;j                for(int k=j-1;k                    if(str[k]=='a')
                        ++ac;
                bc=j-i-ac;
                if(ac==tb-bc || bc==ta-ac)
                    cout << i << "," << j << endl;
            }
        }
    }
    return 0;
}

 

演算法應該不難懂...

 可是跑出來都要9xxms,

 不知道還有哪裡可以修改的...

只要每隔a的個數個或b的個數個就能符合題目所要求的
 
#3115: Re:請問還有哪裡可以修改的


panruru1224 (13K)

學校 : 臺北市立松山高級中學
編號 : 10199
來源 : [118.166.221.140]
最後登入時間 :
2011-09-01 00:52:35
d017. AB Circle -- ZHENGJianqiang | From: [220.136.30.115] | 發表日期 : 2009-12-26 18:11

#include
#include
using namespace std;

int main(){
    string str;
    int cnt=1;
    while(cin >> str){
        cout << "AB Circle #" << cnt++ << ":" << endl;
        int ac=0,bc=0,ta=0,tb=0,length=str.length();
        for(int i=0;i            if(str[i]=='a')
                ++ta;
        tb=length-ta;
        for(int i=0;i            for(int j=i+1;j                for(int k=j-1;k                    if(str[k]=='a')
                        ++ac;
                bc=j-i-ac;
                if(ac==tb-bc || bc==ta-ac)
                    cout << i << "," << j << endl;
            }
        }
    }
    return 0;
}

 

演算法應該不難懂...

 可是跑出來都要9xxms,

 不知道還有哪裡可以修改的...

只要每隔a的個數個或b的個數個就能符合題目所要求的


看不怎麼懂...

 可以詳細說明一下嗎...?

多謝回覆

 
#3116: Re:請問還有哪裡可以修改的


leopan0922 (zz)

學校 : 臺北市立成功高級中學
編號 : 6612
來源 : [140.113.225.106]
最後登入時間 :
2016-08-15 15:44:07
d017. AB Circle -- ZHENGJianqiang | From: [219.70.170.140] | 發表日期 : 2009-12-26 19:01

#include
#include
using namespace std;

int main(){
    string str;
    int cnt=1;
    while(cin >> str){
        cout << "AB Circle #" << cnt++ << ":" << endl;
        int ac=0,bc=0,ta=0,tb=0,length=str.length();
        for(int i=0;i            if(str[i]=='a')
                ++ta;
        tb=length-ta;
        for(int i=0;i            for(int j=i+1;j                for(int k=j-1;k                    if(str[k]=='a')
                        ++ac;
                bc=j-i-ac;
                if(ac==tb-bc || bc==ta-ac)
                    cout << i << "," << j << endl;
            }
        }
    }
    return 0;
}

 

演算法應該不難懂...

 可是跑出來都要9xxms,

 不知道還有哪裡可以修改的...

只要每隔a的個數個或b的個數個就能符合題目所要求的


看不怎麼懂...

 可以詳細說明一下嗎...?

多謝回覆


例如aaabb

總共有3個a.2個b

所以答案是

(0,2)(0,3)(1,3)(1,4)(2,4)(2,5) 

 
#3117: Re:請問還有哪裡可以修改的


leopan0922 (zz)

學校 : 臺北市立成功高級中學
編號 : 6612
來源 : [140.113.225.106]
最後登入時間 :
2016-08-15 15:44:07
d017. AB Circle -- ZHENGJianqiang | From: [219.70.170.140] | 發表日期 : 2009-12-26 19:05

#include
#include
using namespace std;

int main(){
    string str;
    int cnt=1;
    while(cin >> str){
        cout << "AB Circle #" << cnt++ << ":" << endl;
        int ac=0,bc=0,ta=0,tb=0,length=str.length();
        for(int i=0;i            if(str[i]=='a')
                ++ta;
        tb=length-ta;
        for(int i=0;i            for(int j=i+1;j                for(int k=j-1;k                    if(str[k]=='a')
                        ++ac;
                bc=j-i-ac;
                if(ac==tb-bc || bc==ta-ac)
                    cout << i << "," << j << endl;
            }
        }
    }
    return 0;
}

 

演算法應該不難懂...

 可是跑出來都要9xxms,

 不知道還有哪裡可以修改的...

只要每隔a的個數個或b的個數個就能符合題目所要求的


看不怎麼懂...

 可以詳細說明一下嗎...?

多謝回覆


例如aaabb

總共有3個a.2個b

所以答案是

(0,2)(0,3)(1,3)(1,4)(2,4)(2,5) 

 

看看測資 
ab
1a1b
所以答案是
(0,1) baa
2a1b
所以答案是
(0,1)(0,2)(1,2)

 
#3118: Re:請問還有哪裡可以修改的


leopan0922 (zz)

學校 : 臺北市立成功高級中學
編號 : 6612
來源 : [140.113.225.106]
最後登入時間 :
2016-08-15 15:44:07
d017. AB Circle -- ZHENGJianqiang | From: [219.70.170.140] | 發表日期 : 2009-12-26 19:09

#include
#include
using namespace std;

int main(){
    string str;
    int cnt=1;
    while(cin >> str){
        cout << "AB Circle #" << cnt++ << ":" << endl;
        int ac=0,bc=0,ta=0,tb=0,length=str.length();
        for(int i=0;i            if(str[i]=='a')
                ++ta;
        tb=length-ta;
        for(int i=0;i            for(int j=i+1;j                for(int k=j-1;k                    if(str[k]=='a')
                        ++ac;
                bc=j-i-ac;
                if(ac==tb-bc || bc==ta-ac)
                    cout << i << "," << j << endl;
            }
        }
    }
    return 0;
}

 

演算法應該不難懂...

 可是跑出來都要9xxms,

 不知道還有哪裡可以修改的...

只要每隔a的個數個或b的個數個就能符合題目所要求的


看不怎麼懂...

 可以詳細說明一下嗎...?

多謝回覆


例如aaabb

總共有3個a.2個b

所以答案是

(0,2)(0,3)(1,3)(1,4)(2,4)(2,5) 沒有這個抱歉= =

 

看看測資 
ab
1a1b
所以答案是
(0,1) baa
2a1b
所以答案是
(0,1)(0,2)(1,2)


 
#3119: Re:請問還有哪裡可以修改的


panruru1224 (13K)

學校 : 臺北市立松山高級中學
編號 : 10199
來源 : [118.166.221.140]
最後登入時間 :
2011-09-01 00:52:35
d017. AB Circle -- ZHENGJianqiang | From: [220.136.30.115] | 發表日期 : 2009-12-26 19:49

#include
#include
using namespace std;

int main(){
    string str;
    int cnt=1;
    while(cin >> str){
        cout << "AB Circle #" << cnt++ << ":" << endl;
        int ac=0,bc=0,ta=0,tb=0,length=str.length();
        for(int i=0;i            if(str[i]=='a')
                ++ta;
        tb=length-ta;
        for(int i=0;i            for(int j=i+1;j                for(int k=j-1;k                    if(str[k]=='a')
                        ++ac;
                bc=j-i-ac;
                if(ac==tb-bc || bc==ta-ac)
                    cout << i << "," << j << endl;
            }
        }
    }
    return 0;
}

 

演算法應該不難懂...

 可是跑出來都要9xxms,

 不知道還有哪裡可以修改的...

只要每隔a的個數個或b的個數個就能符合題目所要求的


看不怎麼懂...

 可以詳細說明一下嗎...?

多謝回覆


例如aaabb

總共有3個a.2個b

所以答案是

(0,2)(0,3)(1,3)(1,4)(2,4)(2,5) 沒有這個抱歉= =

 

看看測資 
ab
1a1b
所以答案是
(0,1) baa
2a1b
所以答案是
(0,1)(0,2)(1,2)


#include<iostream>
#include<string>
using namespace std;

int main(){
    string str;
    int cnt=1;
    while(cin >> str){
        cout << "AB Circle #" << cnt++ << ":" << endl;
        int l=str.length(),_tmp,ta=0,tb=0;
        for(int i=0;i<l;++i)
            if(str[i]=='a')
                ++ta;
        tb=l-ta;
        _tmp=ta;
        ta=min(ta,tb);
        tb=max(_tmp,tb);
        if(ta==tb)
            for(int i=0;i<l-ta;++i)
                cout << i << "," << i+ta << endl;
        else{
            for(int i=0;i<l-tb;++i)
                cout << i << "," << i+ta << endl << i << "," << i+tb << endl;
            for(int i=l-tb;i<l-ta;++i)
                cout << i << "," << i+ta << endl;
        }
    }
    return 0;
}

現在到600 ms了..

雖然快了不少,

可是有些高手都只有二位數而已...

還有哪裡可以加強的嗎? 

 
#3120: Re:請問還有哪裡可以修改的


leopan0922 (zz)

學校 : 臺北市立成功高級中學
編號 : 6612
來源 : [140.113.225.106]
最後登入時間 :
2016-08-15 15:44:07
d017. AB Circle -- ZHENGJianqiang | From: [219.70.170.140] | 發表日期 : 2009-12-26 20:40

#include
#include
using namespace std;

int main(){
    string str;
    int cnt=1;
    while(cin >> str){
        cout << "AB Circle #" << cnt++ << ":" << endl;
        int ac=0,bc=0,ta=0,tb=0,length=str.length();
        for(int i=0;i            if(str[i]=='a')
                ++ta;
        tb=length-ta;
        for(int i=0;i            for(int j=i+1;j                for(int k=j-1;k                    if(str[k]=='a')
                        ++ac;
                bc=j-i-ac;
                if(ac==tb-bc || bc==ta-ac)
                    cout << i << "," << j << endl;
            }
        }
    }
    return 0;
}

 

演算法應該不難懂...

 可是跑出來都要9xxms,

 不知道還有哪裡可以修改的...

只要每隔a的個數個或b的個數個就能符合題目所要求的


看不怎麼懂...

 可以詳細說明一下嗎...?

多謝回覆


例如aaabb

總共有3個a.2個b

所以答案是

(0,2)(0,3)(1,3)(1,4)(2,4)(2,5) 沒有這個抱歉= =

 

看看測資 
ab
1a1b
所以答案是
(0,1) baa
2a1b
所以答案是
(0,1)(0,2)(1,2)


#include
#include
using namespace std;

int main(){
    string str;
    int cnt=1;
    while(cin >> str){
        cout << "AB Circle #" << cnt++ << ":" << endl;
        int l=str.length(),_tmp,ta=0,tb=0;
        for(int i=0;i            if(str[i]=='a')
                ++ta;
        tb=l-ta;
        _tmp=ta;
        ta=min(ta,tb);
        tb=max(_tmp,tb);
        if(ta==tb)
            for(int i=0;i                cout << i << "," << i+ta << endl;
        else{
            for(int i=0;i                cout << i << "," << i+ta << endl << i << "," << i+tb << endl;
            for(int i=l-tb;i                cout << i << "," << i+ta << endl;
        }
    }
    return 0;
}

現在到600 ms了..

雖然快了不少,

可是有些高手都只有二位數而已...

還有哪裡可以加強的嗎? 

把cout<<換成printf()會快很多喔

cin也換成scanf



 

 
#3121: Re:請問還有哪裡可以修改的


panruru1224 (13K)

學校 : 臺北市立松山高級中學
編號 : 10199
來源 : [118.166.221.140]
最後登入時間 :
2011-09-01 00:52:35
d017. AB Circle -- ZHENGJianqiang | From: [220.136.30.115] | 發表日期 : 2009-12-26 21:15

#include
#include
using namespace std;

int main(){
    string str;
    int cnt=1;
    while(cin >> str){
        cout << "AB Circle #" << cnt++ << ":" << endl;
        int ac=0,bc=0,ta=0,tb=0,length=str.length();
        for(int i=0;i            if(str[i]=='a')
                ++ta;
        tb=length-ta;
        for(int i=0;i            for(int j=i+1;j                for(int k=j-1;k                    if(str[k]=='a')
                        ++ac;
                bc=j-i-ac;
                if(ac==tb-bc || bc==ta-ac)
                    cout << i << "," << j << endl;
            }
        }
    }
    return 0;
}

 

演算法應該不難懂...

 可是跑出來都要9xxms,

 不知道還有哪裡可以修改的...

只要每隔a的個數個或b的個數個就能符合題目所要求的


看不怎麼懂...

 可以詳細說明一下嗎...?

多謝回覆


例如aaabb

總共有3個a.2個b

所以答案是

(0,2)(0,3)(1,3)(1,4)(2,4)(2,5) 沒有這個抱歉= =

 

看看測資 
ab
1a1b
所以答案是
(0,1) baa
2a1b
所以答案是
(0,1)(0,2)(1,2)


#include
#include
using namespace std;

int main(){
    string str;
    int cnt=1;
    while(cin >> str){
        cout << "AB Circle #" << cnt++ << ":" << endl;
        int l=str.length(),_tmp,ta=0,tb=0;
        for(int i=0;i            if(str[i]=='a')
                ++ta;
        tb=l-ta;
        _tmp=ta;
        ta=min(ta,tb);
        tb=max(_tmp,tb);
        if(ta==tb)
            for(int i=0;i                cout << i << "," << i+ta << endl;
        else{
            for(int i=0;i                cout << i << "," << i+ta << endl << i << "," << i+tb << endl;
            for(int i=l-tb;i                cout << i << "," << i+ta << endl;
        }
    }
    return 0;
}

現在到600 ms了..

雖然快了不少,

可是有些高手都只有二位數而已...

還有哪裡可以加強的嗎? 

把cout<<換成printf()會快很多喔

cin也換成scanf



 

真是受教了...

沒想到換了scanf & printf 就從6xxms掉到3xms 了,

多謝多謝

 

 
#3122: Re:請問還有哪裡可以修改的


leopan0922 (zz)

學校 : 臺北市立成功高級中學
編號 : 6612
來源 : [140.113.225.106]
最後登入時間 :
2016-08-15 15:44:07
d017. AB Circle -- ZHENGJianqiang | From: [219.70.170.140] | 發表日期 : 2009-12-26 21:58

#include
#include
using namespace std;

int main(){
    string str;
    int cnt=1;
    while(cin >> str){
        cout << "AB Circle #" << cnt++ << ":" << endl;
        int ac=0,bc=0,ta=0,tb=0,length=str.length();
        for(int i=0;i            if(str[i]=='a')
                ++ta;
        tb=length-ta;
        for(int i=0;i            for(int j=i+1;j                for(int k=j-1;k                    if(str[k]=='a')
                        ++ac;
                bc=j-i-ac;
                if(ac==tb-bc || bc==ta-ac)
                    cout << i << "," << j << endl;
            }
        }
    }
    return 0;
}

 

演算法應該不難懂...

 可是跑出來都要9xxms,

 不知道還有哪裡可以修改的...

只要每隔a的個數個或b的個數個就能符合題目所要求的


看不怎麼懂...

 可以詳細說明一下嗎...?

多謝回覆


例如aaabb

總共有3個a.2個b

所以答案是

(0,2)(0,3)(1,3)(1,4)(2,4)(2,5) 沒有這個抱歉= =

 

看看測資 
ab
1a1b
所以答案是
(0,1) baa
2a1b
所以答案是
(0,1)(0,2)(1,2)


#include
#include
using namespace std;

int main(){
    string str;
    int cnt=1;
    while(cin >> str){
        cout << "AB Circle #" << cnt++ << ":" << endl;
        int l=str.length(),_tmp,ta=0,tb=0;
        for(int i=0;i            if(str[i]=='a')
                ++ta;
        tb=l-ta;
        _tmp=ta;
        ta=min(ta,tb);
        tb=max(_tmp,tb);
        if(ta==tb)
            for(int i=0;i                cout << i << "," << i+ta << endl;
        else{
            for(int i=0;i                cout << i << "," << i+ta << endl << i << "," << i+tb << endl;
            for(int i=l-tb;i                cout << i << "," << i+ta << endl;
        }
    }
    return 0;
}

現在到600 ms了..

雖然快了不少,

可是有些高手都只有二位數而已...

還有哪裡可以加強的嗎? 

把cout<<換成printf()會快很多喔

cin也換成scanf



 

真是受教了...

沒想到換了scanf & printf 就從6xxms掉到3xms 了,

多謝多謝

 



測資大點時cin cout會比scanf printf慢很多 
ZeroJudge Forum