130722CF282解题报告

来源:互联网 发布:java数据结构编程 编辑:程序博客网 时间:2024/06/05 01:58

A题:Bit++

水题,就是求n个++或者--的操作后的结果,直接上代码:

#include <iostream>#include <stdio.h>#include <cmath>#include <string>using namespace std;int main(){    int i,j,n;    string s;    char a;    int b=0;    cin >> n ;    for(i=0; i<n; i++)    {        cin >> s;        int l=s.length();        for(j=0; j<l; j++)        {            if(s[j]=='+')            {                b++;                break;            }            if(s[j]=='-')            {                b--;                break;            }        }    }    cout << b << endl;    return 0;}


B题:Painting Eggs

这道题一开始没读懂,后来读着读着在结合样例,就知道了~~

题意:两个人干活,A和G。A对第i个鸡蛋要ai,G要gi。只要A的总价格加上第i次的价格G总价格<=500.那么就打印A。

code:

#include <iostream>#include <stdio.h>#include <cmath>#include <algorithm>using namespace std ;char a[1000005];int main(){    int i,n;    int x,y,sum1=0,sum2=0;    cin >> n;    for(i=0;i<n;i++)    {        cin >> x >> y;        if(sum1+x-sum2<=500)        {            sum1+=x;            a[i]='A';        }        else        {            sum2+=y;            a[i]='G';        }    }    for(i=0;i<n;i++)    cout << a[i];    cout << endl ;    return 0;}

C题:XOR and OR

这道题怎么说呢~~~一开始没明白怎么换。后来仔细读题是将取出来的两个相邻的数取异或和或运算。再将两个数代替。那这样就好办了。当两个串长度不相等时,肯定输出NO。当两串相等时,输出YES。当两串长度相等但不相同时,只要两串中都含有1即可~~~

#include <iostream>#include <stdio.h>#include <cmath>#include <cstring>#include <algorithm>using namespace std ;int main(){    string a,b;    cin >> a >> b;    int l1=a.length();    int l2=b.length();    int i,num1=0,num2=0;    if(a==b)    cout << "YES" << endl;    else if(a=="1")    cout << "NO" << endl;    else    {        if(l1!=l2)        cout << "NO" << endl;        else        {            for(i=0;i<l1;i++)            {                if(a[i]=='1')                {                    num1++;                }            }            for(i=0;i<l2;i++)            {                if(b[i]=='1')                num2++;            }            if(num1&&num2)            cout << "YES" << endl;            else            cout << "NO" << endl;        }    }    return 0;}


D题:Yet Another Number Game

这题是一道博弈题:当n==1时,是巴什博奕。当n=2时,是威佐夫博奕。当n=3时,是nim博弈。

下面分情况讨论一下。

(1)n=1时,巴什博奕。那么当a[0]=0时,先手是必败的。a[0]>0时,先手必胜。

(2)n=2时,威佐夫博奕。由于这道题数据是0—300.数据量很小。直接将奇异局势打表打出来。在将a[0],a[1]与

         奇异局势相比较,若(a[0],a[1])是奇异局势,那么先手必败。否则,先手必胜。

(3)n=3时,nim博弈。判断a[0]^a[1]^a[2]的值,若为0,则先手必败。否则先手必胜。

代码如下:

#include <iostream>#include <stdio.h>using namespace std;int a[10];int x[305]= {0},y[305]= {0},vis[666]= {0};int main(){    int n,i,k=0,p=0,q=0,flag=0;    cin >> n;    for(i=0; i<n; i++)    {        cin >> a[i];    }    for(i=0; i<=300; i++)    {        if(vis[i]==0)        {            x[p]=i;            y[q]=x[p]+k;            k++;            vis[x[p]]=1,vis[y[q]]=1;            p++,q++;        }    }    if(n==1)    {        if(a[0]==0)            cout << "BitAryo" << endl;        else            cout << "BitLGM" << endl;    }    else if(n==2)    {        if(a[0]>a[1])        swap(a[0],a[1]);        for(i=0;i<=p;i++)        {            if(a[0]==x[i]&&a[1]==y[i])            {                flag=1;                break;            }        }        if(flag==1)        cout << "BitAryo" << endl;        else        cout << "BitLGM" << endl;    }    else    {        if((a[0]^a[1]^a[2])==0)            cout << "BitAryo" << endl;        else            cout << "BitLGM" << endl;    }    return 0;}


 

原创粉丝点击