頻道欄目
首頁 > 資訊 > 其他 > 正文

2016 "Bird Cup" ICPC7th@ahstu--“波導杯”安徽科技學院第七屆程序設計大賽

16-04-28        來源:[db:作者]  
收藏   我要投稿

Description

小楊是一名Dota資深玩家,和眾多Dota玩家一樣,他和周圍一群LOL玩家在一起有一種自然的優越感,然而身邊的刀友確一個個投入了擼狗的行列,直到現在周圍再沒了
一個同行。。。他很憤慨,于是有了下面這道題目:
兩個分別只含有Dotaer和Loler中的字母的字符串,長度(<10^6),請你分別統計兩個字符串中所含字母能夠組成Dotaer和Loler的最大數量(不區分大小寫),然后根
據兩者的數量判斷輸贏,若Loler數量大于Dotaer數量的3倍,則Loler win,反之Dotaer win。

Input

每個輸入包含多個測試用例,每個測試用包括兩行,第一行為構成Dotaer的字符串,第二行為構成Loler的字符串。

Output

對于每個測試用例輸出三行,第一行為Dotaer數量,第二行為Loler數量,第三行為哪方win。

Sample Input

otdarrreoddtooaaoooee
rolereoreolrereoreol

Sample Output

Dotaer: 2
Loler: 1
Dotaer win

Source

icpc7th@ahstu

    #include
    #include
    #include
    #include
    using namespace std;
    void init(vector &A,int num)
    {
        for(int i=0;i<=num;i++){
            A.push_back(i);
        }
    }
    void game(vector A,int *way,int n,int first)
    {
        int index;
         A.erase(A.begin()+first);
         index=first-1;
        for(int i=0;i A;
        int way[100];
        while(cin>>num>>first>>n)
        {
            for(int i=0;i>way[i];

            init(A,num);
             game(A,way,n,first);
             A.clear();
        }
        return 0;
    }

so so so easy


Time Limit:1000MS Memory Limit:65536K
Total Submit:46 Accepted:14

Description

為了避免打光頭的情況出現,仁慈的老趙在每次比賽中總會想方設法的加水題進去,一個兩個三個…..。
現有一個完全由被空格所分開的英文單詞構成的字符串(單詞數量<=100),請你數出每個單詞是連續第幾次出現。(例如 so so so easy 結果為 1 2 3 1)

Input

每個輸入包含多個測試用例,每個測試用例為一個完全由被空格所分開的英文單詞構成的字符串。

Output

對于每個測試用例,輸出其每個單詞是連續第幾次出現。

Sample Input

so so so easy so so

Sample Output

1 2 3 1 1 2

Source

icpc7th@ahstu

    #include
    #include
    #include
    #include
    using namespace std;
    void init(vector &A,int num)
    {
        for(int i=0;i<=num;i++){
            A.push_back(i);
        }
    }
    void game(vector A,int *way,int n,int first)
    {
        int index;
         A.erase(A.begin()+first);
         index=first-1;
        for(int i=0;i A;
        int way[100];
        while(cin>>num>>first>>n)
        {
            for(int i=0;i>way[i];

            init(A,num);
             game(A,way,n,first);
             A.clear();
        }
        return 0;
    }

反轉鏈表


Time Limit:1000MS Memory Limit:65536K
Total Submit:5 Accepted:0

Description

給定一個常數K以及一個單鏈表L,請編寫程序將L中每K個結點反轉。例如:給定L為1→2→3→4→5→6,K為3,則輸出應該為3→2→1→6→5→4;如果K為4,則輸出應該為4→3→2→1→5→6,即最后不到K個元素不反轉。

Input

每個輸入包含多個測試用例。每個測試用例第1行給出第1個結點的地址、結點總個數正整數N(<= 105)、以及正整數K(<=N),即要求反轉的子鏈結點的個數。結點的地址是5位非負整數,NULL地址用-1表示。

接下來有N行,每行格式為:

Address Data Next

其中Address是結點地址,Data是該結點保存的整數數據,Next是下一結點的地址。

Output

對每個測試用例,順序輸出反轉后的鏈表(每個節點的 Address Data Next),其上每個結點占一行,格式與輸入相同。

Sample Input

00100 6 4
00000 4 99999
00100 1 12309
68237 6 -1
33218 3 00000
99999 5 68237
12309 2 33218

Sample Output

00000 4 33218
33218 3 12309
12309 2 00100
00100 1 99999
99999 5 68237
68237 6 -1

Source

icpc7th@ahstu

    #include
    #include
    #include
    #include
    #include
    #include
    using namespace std;

    typedef struct
    {
        int add;
        int data;
        int next;
    }Node;
    Node L[100001];
    vectorN;
    vector::iterator it;
    int scan(int &Add,int &num,int &n)
    {
        Node N;
        for(int i=0;i>N.add>>N.data>>N.next;
            L[N.add]=N;
        }
        return 1;
    }
    void L_sort(int start,int n)
    {
         int flag=start;
         while(flag!=-1)
         {
             N.push_back(L[flag]);
             flag=L[flag].next;
         }
    }
    void F_sort(int n)
    {
        int G=N.size()/n;
        for(int i=0;i<g;i++) {="" reverse((n.begin()+i*n),(n.begin()+(i+1)*n));="" }="" void="" print()="" for(it="N.begin();it>Add>>num>>n)
        {
            scan(Add,num,n);
           L_sort(Add,n);
           F_sort(n);
           print();
           N.clear();
        }
        return 0;
    }

貪吃蛇


Time Limit:1000MS Memory Limit:65536K
Total Submit:9 Accepted:2

Description

有童年的孩子都玩過這個經典游戲,不過這里的規則又有點不同,現在有一個N*M(N,M<=100)的方形矩形,在這個矩形的每一個方格上都放有若干個櫻桃,一條可愛的小蛇從矩形的
左上角開始出發,每次移動都只能移動一格,向右或向下,而每到達一格貪吃的小蛇都會吧該位置上的櫻桃吃個一干二凈,直到到達右下角時停止。而貪吃的小蛇不怕撐死,它只想吃到最多
的櫻桃,請你告訴它他最多能吃到多少櫻桃以及具體路線吧。(數據保證最優路線只有一條)

Input

每個輸入包含多個測試用例,每個測試用例第一行給出N,M,接下來N行M列數據代表每個位置上的櫻桃個數。(矩陣坐標從(1,1)開始)。

Output

對于每個測試用例輸出第一行為能吃到的最大櫻桃個數,接下來為小蛇所需要走的路線的坐標,每個坐標占一行。

Sample Input

4 4
1 2 3 7
3 4 2 1
1 5 4 8
10 3 0 3

Sample Output

28
(1,1)
(2,1)
(2,2)
(3,2)
(3,3)
(3,4)
(4,4)

Source

icpc7th@ahstu

    #include
    #include
    #include
    #include
    #include
    using namespace std;
    typedef struct
    {
        int m_sum;
        vector way;
    }MP;
    int mp[102][102];
    MP Mp[102][102];
    int N,M;
    string change(int a)
    {
        string A;
        while(a!=0)
        {
            A+=((a%10)+'0');
            a/=10;
        }
        reverse(A.begin(),A.end());
        return A;
    }
    void scan()
    {
        for(int i=0;i<=M;i++)
            mp[0][i]=0;
        for(int i=0;i<=N;i++)
            mp[i][0]=0;
        for(int i=1;i<=N;i++)
        {
            for(int j=1;j<=M;j++)
            cin>>mp[i][j];
        }
    }
    void hand_mp()
    {
        for(int i=1;i<=N;i++)
        {
            for(int j=1;j<=M;j++)
            {
                Mp[i][j].m_sum=mp[i][j]+((mp[i][j-1]>=mp[i-1][j])?mp[i][j-1]:mp[i-1][j]);
                mp[i][j]= Mp[i][j].m_sum;
                Mp[i][j].way=(mp[i][j-1]>=mp[i-1][j])?(Mp[i][j-1]).way:(Mp[i-1][j]).way;
                Mp[i][j].way.push_back(change(i));
                Mp[i][j].way.push_back(change(j));
            }
        }
    }
    void print()
    {
        cout<>N>>M)
        {
            scan();
            hand_mp();
            print();
        }
        return 0;
    }

均分硬幣


Time Limit:1000MS Memory Limit:65536K
Total Submit:14 Accepted:4

Description

有N堆硬幣,編號分別為 1,2,…, N(N<=100) 每堆上有若干個硬幣,可以在任一堆上取若干個硬幣,然后移動。移動規則為:在編號為 1 堆上取的硬幣,只能移到編號為 2 的堆上;
在編號為 N 的堆上取的硬幣,只能移到編號為 N-1 的堆上;其他堆上取的硬幣,可以移到相鄰左邊或右邊的堆上,F在要求找出一種移動方法,用最少的移動次數使每堆上硬幣
數都一樣多。例如 N=4,4 硬幣數分別為: ① 9、凇8、邸17、堋6 移動3次可達到目的。

Input

每個輸入包含多個測試用例,每個測試用例第一行為整數N硬幣堆數,接下來一行N個數為相應堆上硬幣的數量。

Output

對于每個測試用例,輸出其最少需要移動次數,若無法均分則輸出“Oh no!”

Sample Input

4
9 8 17 6

Sample Output

3

Source

icpc7th@ahstu

    #include
    #include
    using namespace std;
    int avg(int *A,int n)
    {
        int sum=0;
        int avge;
        int flag=0;
        for(int i=0;i>N)
        {
            for(int i=0;i>A[i];
            avg(A,N);
        }
        return 0;
    }

丟啊丟啊丟手絹


Time Limit:1000MS Memory Limit:65536K
Total Submit:17 Accepted:4

Description

在安科圖書館前的草地上圍坐著N個同學1,2,3,…..N.(按順序圍成一個圈),然后從其中一個同學開始,拿著一手絹按編號從小到大的方向一步一步繞著圈子走,
一步經過一個同學,若干步后把手絹交給面前的同學,接到手絹的同學不改變方向用同樣的方式把手絹交給另一個同學后淘汰出游戲,凡是一個同學離開圈子,剩下同學
把空缺消除再構成一個圓(相對位置不變),F在告訴你開始同學的編號和手帕n次行進的步數,你知道終剩下哪些同學嗎?

Input

每個輸入包含多個測試用例,每個測試用例包括兩部分:
第一部分三個數字num(參與游戲學生總數),i(初始學生編號),n(手絹移動的次數)。
第二部分n個整數為n次手絹分別移動的步數。

Output

輸出游戲結束后所剩學生的編號(按升序輸出)。

Sample Input

6 2 3
2 3 4

Sample Output

5 6

Source

icpc7th@ahstu

    #include
    #include
    #include
    #include
    using namespace std;
    void init(vector &A,int num)
    {
        for(int i=0;i<=num;i++){
            A.push_back(i);
        }
    }
    void game(vector A,int *way,int n,int first)
    {
        int index;
         A.erase(A.begin()+first);
         index=first-1;
        for(int i=0;i A;
        int way[100];
        while(cin>>num>>first>>n)
        {
            for(int i=0;i>way[i];

            init(A,num);
             game(A,way,n,first);
             A.clear();
        }
        return 0;
    }

分糖果


Time Limit:1000MS Memory Limit:65536K
Total Submit:0 Accepted:0

Description

小洛,小歡,小濤是三個小屁孩,他們有一個共同的愛好—吃糖!小楊每天都會給他們買糖吃,但他有個要求,每次小楊會把買來的糖隨機分成三堆,
(<=10^4) 三個小屁孩想要吃到糖,就必須按小楊的要求每次把任意一堆糖的一半放到其他糖堆里,最終使三堆糖的數量和小楊所要求的完全一致,才被允許吃.
(若一堆糖為奇數個,它的一半為較少的那部分)。那么他們最少需要移動多少次才能吃到糖果。

Input

每個輸入包含多個測試用例,每個測試用例第一行給出3個數字為初始的糖堆數量,第二行3個數字為小楊要求糖堆最終數量。

Output

對于每個測試用例輸出一行為其最少移動次數,若不可能達到要求輸出“Unfind”。

Sample Input

6 10 3
6 5 8

1 2 5
3 0 5

Sample Output

1
Unfind

Source

icpc7th@ahstu

    #include
    #include
    #include
    #include
    #include
    #include
    using namespace std;

    typedef struct
    {
        int step;
        int candy[3];
    } ST;
    mapmp;
    int init[3];
    int target[3];
    void state(ST &S,int i)
    {
        int f,s,t;
        f=S.candy[0];
        s=S.candy[1];
        t=S.candy[2];
        S.step++;
        switch(i)
        {
        case 1:
            S.candy[0]=f-f/2;
            S.candy[1]=s+f/2;
            break;
        case 2:
            S.candy[0]=f+s/2;
            S.candy[1]=s-s/2;
            break;
        case 3:
            S.candy[0]=f-f/2;
            S.candy[2]=t+f/2;
            break;
        case 4:
            S.candy[0]=f+t/2;
            S.candy[2]=t-t/2;
            break;
        case 5:
            S.candy[1]=s-s/2;
            S.candy[2]=t+s/2;
            break;
        case 6:
            S.candy[1]=s+t/2;
            S.candy[2]=t-t/2;
            break;
        }
    }
    int Search(int *init,int *target,queue &Q,int &STEP)
    {
        ST flag;
        string fl,l;
        flag.step=0;
        flag.candy[0]=init[0];
        flag.candy[1]=init[1];
        flag.candy[2]=init[2];
        Q.push(flag);
        for(int i=0; i<3; i++)
        {
            char b[15];
            sprintf(b,"%d",flag.candy[i]);
            fl+=b;
        }
        mp[fl]=1;
        if(flag.candy[0]==target[0]&&flag.candy[1]==target[1]&&flag.candy[2]==target[2])
        {
            STEP=flag.step;
            return 1;
        }
        while(!Q.empty())
        {
            flag=Q.front();
            for(int i=1; i<=6; i++)
            {
                state(flag,i);
                if(flag.candy[0]==target[0]&&flag.candy[1]==target[1]&&flag.candy[2]==target[2])
                {
                    STEP=flag.step;
                    return 1;
                }
                fl="";
                for(int i=0; i<3; i++)
                {
                    char b[15];
                    sprintf(b,"%d",flag.candy[i]);
                    fl+=b;
                }
                if(mp[fl]!=1)
                {
                    Q.push(flag);
                    mp[fl]=1;
                }
                flag=Q.front();
            }
            Q.pop();
        }
        return 0;
    }
    int main()
    {
        int f,s,t;
        int F,S,T;
        int STEP;
       // freopen("分糖果.in","r",stdin);
        //freopen("分糖果.out","w",stdout);
        while(cin>>f>>s>>t>>F>>S>>T)
        {
            if((f+s+t)!=(F+S+T))
            {
                cout<<"Unfind"< Q;
            init[0]=f;
            init[1]=s;
            init[2]=t;
            target[0]=F;
            target[1]=S;
            target[2]=T;
            if(Search(init,target,Q,STEP))
                cout<

埋炸彈啦~


Time Limit:1000MS Memory Limit:65536K
Total Submit:47 Accepted:18

Description

小明是個埋彈專家同時也是個數學愛好者,他每次進行埋彈任務時都喜歡數字決定埋在哪里,他會選出兩個數字然后分別把它們轉化成八位二進制數,第一個作為橫向坐標(從左往右),
第二個作為縱向(從上往下)坐標構成一個8*8的矩陣,而他埋彈的位置當然就是橫豎坐標中1的交叉點。請把他埋的位置表示出來,炸彈位置用‘+’表示,其他地方用‘-’表示。

Input

每個輸入包含多個測試用例,每個測試用例一行為兩個整數 a,b(0<=a,b<256)為小明所選定的兩個數。

Output

對于每個測試用例,輸出一個8*8的矩陣,按要求表明炸彈位置。

Sample Input

9 18

Sample Output

--------
--------
--------
----+--+
--------
--------
----+--+
--------

Source

icpc7th@ahstu

    #include
    #include
    #include
    #include
    using namespace std;
    string X,Y;
    int x,y;
    void init()
    {
        while(x!=0)
        {
            X+=((x%2)+'0');
            x/=2;
        }
        while(y!=0)
        {
            Y+=((y%2)+'0');
            y/=2;
        }
        reverse(X.begin(),X.end());
        reverse(Y.begin(),Y.end());
        int l1=X.size();
        int l2=Y.size();
        for(int i=0;i<8-l1;i++)
            X.insert(X.begin(),'0');
        for(int i=0;i<8-l2;i++)
            Y.insert(Y.begin(),'0');
    }
    void bomb()
    {
        for(int i=0;i>x>>y)
        {
            init();
            bomb();
            X="";
            Y="";
        }
        return 0;
    }

化學老師的懲罰


Time Limit:1000MS Memory Limit:65536K
Total Submit:0 Accepted:0

Description

小明的化學成績很差,他的老師對他恨鐵不成鋼啊,于是想了一個法子——把他關在了一個密室里,出不來不給吃飯。這個把小明急壞了。。
小明發現密室的墻上寫了許多化學方程式中;瘜W方程式,也稱為化學反應方程式,是用化學式表示物質化學反應的式子;瘜W方程式反映的是客觀事實。因此書寫化學方程式要遵守兩個原則:一是必須以客觀事實為基礎;二是要遵守質量守恒定律。
化學方程式不僅表明了反應物、生成物和反應條件。同時,化學計量數代表了各反應物、生成物物質的量關系,通過相對分子質量或相對原子質量還可以表示各物質之間的質量關系,即各物質之間的質量比。對于氣體反應物、生成物,還可以直接通過化學計量數得出體積比。例如:2NaOH+H2SO4=Na2SO4+2H2O
經過多次試探、推理,小明發現密碼是4位數字,就隱藏在化學方程式等號后的第一個分子中,其分子量就可能是密碼(若分子量不足4位,前面加0)。

好在小明還記得墻上各化學方程式用到的化學元素的原子量如下:

N | C | O | Cl | S | H | Al | Ca | Zn | Na | B | Ni

14 | 12 | 16 | 35 | 32 | 2 | 27 | 40 | 65 | 23 | 11 | 59

你能幫小明盡快找到密碼嗎?

Input

輸入包含多組測試用例。
每個測試用例 第一行: K,表示有K個化學方程式;
接下來有K行,每行為一個化學方程式

Output

對于每個化學方程式輸出一行:即密碼。

Sample Input

2
2C+O2=2CO
Ca2CO3+H2O=Ca2(OH)2+CO2

Sample Output

0056
0116

Source

icpc7th@ahstu

    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    using namespace std;
    mapmp;
    vectorsp;
    vectorsp_num;
    string total;
    void init()
    {
        mp["Na"]=23;mp["Zn"]=65;
        mp["Ca"]=40;mp["Al"]=27;
        mp["H"]=2;  mp["S"]=32;
        mp["Cl"]=35;mp["O"]=16;
        mp["C"]=12; mp["N"]=14;
         mp["B"]=11; mp["Ni"]=59;
    }
    int calculate(string B)
    {
        int sum=0;
        for(int i=0; i>N)
        {
        while(N--)
        {
            string A;
            cin>>A;
            Find(A);
            printf("%04d\n",T_calculate());
            sp.clear();
            sp_num.clear();
            total="";
        }
        }
        return 0;
    }

水題!


Time Limit:1000MS Memory Limit:65536K
Total Submit:116 Accepted:44

Description

杯子高H,水高h,杯頂半徑R,杯底半徑r,求水的體積。(Pi=3.1415926)

Input

H R r h

Output

水的體積

Sample Input

10 8 7 4

Sample Output

855.56

Hint

圓臺計算公式V=1/3*Pi*h*(R^2+r^2+R*r)

Source

icpcth7@ahstu

相關TAG標簽
上一篇:臺積電:絕大多數7nm客戶都會轉向6nm_IT新聞_博客園
下一篇:最后一頁
相關文章
圖文推薦

關于我們 | 聯系我們 | 廣告服務 | 投資合作 | 版權申明 | 在線幫助 | 網站地圖 | 作品發布 | Vip技術培訓 | 舉報中心

版權所有: 紅黑聯盟--致力于做實用的IT技術學習網站

美女MM131爽爽爽毛片