【Codeforces】A2组刷题记录(50 / 50)完结

目录

A1. Counterexample

A2. Good Number

A3. Dice Tower

★A4. Alyona and Numbers

A5. Mountain Scenery

rzt A6. Help Vasilisa the Wise 2

A7. Chewbaсca and Number

★A8. Ksenia and Pan Scales

★A9. Launch of Collider

A10. Polo the Penguin and Segments

★A11. IQ Test

★A12. Yaroslav and Permutations

★A13. Snow Footprints

★A14. Raising Bacteria

★A15. BowWow and the Timetable

★A16. Balanced Rating Changes

rzt A17. Word Capitalization

rzt A18. Next Round 

rzt A19. Young Physicist

rzt A20. Bit++

★A21. Case of the Zeros and Ones

rzt A22. Translation

★A23. String Task

rzt A24. Laptops

 ★A25. Left-handers, Right-handers and Ambidexters

rzt A26. George and Accommodation 

A27. Vasya the Hipster

A28. Fox And Snake

rzt A29. The New Year: Meeting Friends

A30. Elephant

A31. Greg's Workout

rzt A32. Ultra-Fast Mathematician 

★A33. Little Pony and Crystal Mine

A34. One-dimensional Japanese Crossword

rzt A35. Soldier and Bananas

A36. Bus to Udayland

A37. Cookies

A38. Second Order Statistics

rzt A39. Nearly Lucky Number

rzt A40. Playing with Dice

rzt A41. A Good Contest

A42. Beautiful Year

★A43. Far Relative’s Birthday Cake

★A44. Mashmokh and Lights

rzt A45. Triangular numbers

rzt A46. Roma and Lucky Numbers

★A47. Toy Army

A48. Levko and Table

★A49. Cards

A50. Wizards' Duel


A1. Counterexample

Problem - A - Codeforces

题意

求在 l 到 r 之间满足a,b的最大公约数等于 b ,c 的最大公约数等于 1 ,且 a,c的最大公约数不等于 1 的数 a,b ,c 

三个for循环暴力查找+开long long

十年OI一场空,不开long long见祖宗

#include <iostream>
#define ll long long
using namespace std;

ll gcd(ll a,ll b)
{
    return b? gcd(b,a%b):a;
}

int main()
{
    ll l,r;
    cin>>l>>r;
    for(ll i=l;i<=r;i++)
        for(ll j=i;j<=r;j++)
            for(ll k=j;k<=r;k++)
                if(gcd(i,j)==1&&gcd(j,k)==1&&gcd(i,k)!=1)
                {
                    cout<<i<<' '<<j<<' '<<k;
                    return 0;
                }
    cout<<-1;
}

A2. Good Number

Problem - A - Codeforces

题意

第一行输入n和k  n—n行数据 

接下来n行输入n个数

如果该数的各个位数包含0~k的每个数 则该数为k-好数

求k-好数的个数

用标记法

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

int main()
{
    int n,k,x,sum=0,i;
    int index[9]={0};
    cin>>n>>k;
    while(n--)
    {
        cin>>x;
        for(i=0;i<=k;i++) index[i]=0;
        while(x)
        {
            index[x%10]=1;
            x/=10;
        }
        for(i=0;i<=k;i++)
            if(index[i]==0) break;
        if(i==k+1) sum++;

    }
    cout<<sum;
}

A3. Dice Tower

Problem - A - Codeforces

题意

第一行输入骰子数n

第二行输入第一个骰子的顶面

接下来n行输入骰子的正面 和侧面

注意叠起来的骰子塔相连的部分应该是一样的

判断给定数据是否能叠成一个合格的骰子塔

我们只需要一个一个骰子分析

给的正面和侧面是否合格 不合格输出NO 反之YES

然后每次循环更新一下顶面数据即可

#include <iostream>
using namespace std;

int main()
{
    int n,top,a,b;
    cin>>n;
    cin>>top;
    while(n--)
    {
        cin>>a>>b;
        if(a==b||a+b==7||a==top||b==top||a==7-top||b==7-top)
        {
            cout<<"NO";
            return 0;
        }
        top=7-top;
    }
    cout<<"YES";
    return 0;
}

★A4. Alyona and Numbers

Problem - A - Codeforces

题意

给定两个数n, m(1 <= n,m <= 1000000)。分别从1~n, 1~m中选择两个数,使它们的和为5的倍数,求这样的数对共有多少(a+b, b+a视为不同的数对)。

暴力双for肯定不行的 会TLE(要不然也太简单了)

这题是数论题……啊烦人的数学

思路: 

想要两个数相加为 5 的倍数,那它们除5的余数相加必须等于 5

或者两者除5的余数都为0

本题要计算满足两数之和是5倍数的数对个数

那么就是先各找出n m范围内余数为0 1 2 3 4的个数 存数组里

然后根据排列组合的原理算出结果即可(因为题目说a+b和b+a算不同的数对)

#include<bits/stdc++.h>
using namespace std;
long long n,m;
long long a[5],b[5];
int main()
{
	cin>>n>>m;
	for(int i=1;i<=n;i++) a[i%5]++;
    for(int i=1;i<=m;i++) b[i%5]++;

	cout<<a[0]*b[0]+a[1]*b[4]+a[2]*b[3]+a[3]*b[2]+a[4]*b[1]; //排列组合算出结果
	
	return 0;
}

A5. Mountain Scenery

Problem - A - Codeforces

题意

第一行给出n k

第二行给出序列

比如:  3  2

             0 5 3 5 1 5 2

其中偶数位 - 1仍然满足大于前后两个数 题目要求其中有2个下标为偶数的数相比输入的序列被减了1 也就是可以是0 4 3 4 1 5 2

这题有sqj  所以跟样例不同很正常

#include <iostream>
using namespace std;

int main()
{
    int n,k,a[201],i;
    cin>>n>>k;
    for(i=1;i<=2*n+1;i++) cin>>a[i];
    for(i=2;i<=2*n+1;i+=2)
    {
        if(a[i]-1>a[i-1]&&a[i]-1>a[i+1]) k--,a[i]--;
        if(k==0) break;
    }
    for(i=1;i<=2*n+1;i++) cout<<a[i]<<' ';
}

rzt A6. Help Vasilisa the Wise 2

Problem - A - Codeforces

题意

有一个 2×2 的棋盘,有 9 个棋子,上面分别写着 1,2,3,…9。现在给出每行每列及每条对角线上两个棋子 的数之和,求相应的棋子摆放方法。无解输出 -1

暴力枚举即可   O(9^4)

#include <iostream>
using namespace std;

int main()
{
    int r1,r2,c1,c2,d1,d2;
    cin>>r1>>r2>>c1>>c2>>d1>>d2;
    for(int i1=1;i1<=9;i1++)
        for(int i2=1;i2<=9;i2++)
            for(int i3=1;i3<=9;i3++)
                for(int i4=1;i4<=9;i4++)
                    if(i1+i2==r1&&i3+i4==r2&&i1+i3==c1&&i2+i4==c2&&i1+i4==d1&&i2+i3==d2&&(i1!=i2)&&(i1!=i3)&&(i1!=i4)&&(i2!=i3)&&(i2!=i4)&&(i3!=i4))
                    {
                        cout<<i1<<' '<<i2<<endl<<i3<<' '<<i4;
                        return 0;
                    }
    cout<<-1;
}

A7. Chewbaсca and Number

Problem - A - Codeforces

题意

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

int main()
{
    string a;
    cin>>a;

    for(int i=0;i<a.size();i++)
        a[i]=min(a[i],char(9+'0'-a[i]+'0'));
    if(a[0]=='0') a[0]='9';
    cout<<a;
}

A8. Ksenia and Pan Scales

Problem - A - Codeforces

题意

令人头大的一道题 烦死了呜呜

思路

先计算天平两侧的初始个数 l 和 r

根据下图思路划定中位线(找规律)

然后进行分配 如果左右个数不等 则输出impossible

否则输出结果就行

#include <iostream>
using namespace std;

int main()
{
    string l,r,a,b;
    int flag=0,len=0,ren=0;
    cin>>a>>b;
    int lenb=b.size();
    for(int i=0;i<a.size();i++)
    {
        if(a[i]!='|'&&!flag) l+=a[i],len++;
        if(flag) r+=a[i],ren++;
        if(a[i]=='|') flag=1;
    }

    int mid=(lenb-(len-ren))/2;  //mid为记录字符串b的中线

    for(int i=0;i<mid;i++) l+=b[i],len++;
    for(int i=mid;i<lenb;i++) r+=b[i],ren++;
    if(len!=ren)
    {
        cout<<"Impossible";
        return 0;
    }

    cout<<l<<'|'<<r;
}

★A9. Launch of Collider

Problem - A - Codeforces

题意

找规律即可发现只有 RL这种情况才能碰撞(一个向右 一个向左)

所以只要找到RL这种组合 然后循环比较出最小时间即可

时间=后面-前面 / (v1+v2) 

注意0x3f3f3f3f是最大数

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

int main()
{
    int n,res=0x3f3f3f3f;
    string d;
    cin>>n>>d;
    int a[n];
    for(int i=0;i<n;i++)
        cin>>a[i];
        
    for(int i=1;i<n;i++)
        if(d[i-1]=='R'&&d[i]=='L')
            res=min(res,(a[i]-a[i-1])/2);
            
    if(res==0x3f3f3f3f) cout<<-1;
    else cout<<res;
}

A10. Polo the Penguin and Segments

Problem - A - Codeforces

题意

这题根本不用管区间的l和r数是什么 只要管该区间所包含的整数数量

用sum把整数数量和求出 因为只能将区间扩展 意思是只能sum++

也就是求sum%k==0 时 sum++的次数 


#include <iostream>
using namespace std;
 
int main()
{
    int n,k,l,r,sum=0,cnt=0;
    cin>>n>>k;
    while(n--)
    {
        cin>>l>>r;
        sum+=r-l+1;
    }
    while(sum%k!=0)
    {
        sum++;
        cnt++;
    }
    cout<<cnt;
}

★A11. IQ Test

Problem - A - Codeforces

题意

 这题究极找规律 看了下面这篇题解 看完我顿悟了(没有)

但其实理解错了 我第一次以为是统计4×4的表格 但其实是统计2×2的表格

大佬的思路太强了 这方法的代码又简短又易懂 找规律yyds

#include <iostream>
using namespace std;

int q(char ch)
{
    return ch=='.'? -1:1;
}

int main()
{
    char a[4][4];
    int i,j,flag=0;
    for(i=0;i<4;i++)
        for(j=0;j<4;j++)
            cin>>a[i][j];

    for(i=0;i<3;i++)
        for(j=0;j<3;j++) //或运算 如果出现1 flag就为1
            flag|=q(a[i][j])+q(a[i+1][j])+q(a[i][j+1])+q(a[i+1][j+1]);

    if(!flag) cout<<"NO";//如果循环完flag都是0 则说明没有符合题意的2×2方格
    else cout<<"YES";
}

★A12. Yaroslav and Permutations

Problem - A - Codeforces

题意

有一个数组,现在你要在有限的次数内移动相邻的两个数,最后是否能使数组中没有数字相同的相邻元素。

思路

想要元素不相邻,即同一个元素要间隔放,已知相同一个元素最多可以这样

k a k b k c k    n=7  k出现4次

即最多可以出现(n+1)/ 2次,只要k出现的次数小于该最大次数,就能实现间隔排放 

其中k为该数组中出现次数最大的数

#include <iostream>
using namespace std;

int main()
{
    int n,x,maxn=0,index[1001]={0};
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>x;
        index[x]++;
        if(maxn<index[x]) maxn=index[x];
    }
    if(maxn<=(n+1)/2) cout<<"YES";
    else cout<<"NO";
}

★A13. Snow Footprints

Problem - A - Codeforces

题意

 这题1300  而且是spj题 有1000种解法

思路

 三种情况:只有L  只有R  和RRLL这种    至于LLRR这种模拟一下就知道不可能

#include <iostream>
using namespace std;

int main()
{
    int n;
    string s;
    cin>>n>>s;
    int lst=-1,led=-1,rst=-1,red=-1;
    for(int i=0;i<n;i++)
    {
        if(s[i]=='R') red=i;
        if(s[i]=='L') led=i;
        if(rst==-1&&s[i]=='R') rst=i;
        if(lst==-1&&s[i]=='L') lst=i;
    }
    if(lst==-1) cout<<rst+1<<' '<<red+2;
    else if(rst==-1) cout<<led+1<<' '<<lst;
    else cout<<rst+1<<' '<<red+1;  //+1是因为数组从0开始的 (字符串)
}

★A14. Raising Bacteria

Problem - A - Codeforces

题意

每个细菌每天分裂成2个新细菌可以得到,要看到x个细菌就是求x里面有多少个2^n,2^n-1……2^0 由二进制的定义可得,这个题目就是求x在二进制下有多少个1

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

int main()
{
    int n,cnt=0;
    cin>>n;
    while(n)
    {
        if(n%2==1) cnt++;
        n/=2;
    }
    cout<<cnt;
}

★A15. BowWow and the Timetable

Problem - A - Codeforces

题意

我的思路是先把二进制转十进制 然后再在十进制数里找有多少个4的次方 cnt计数

但是卡第四个test 看了一下发现是精度问题(kao)

错误代码:

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

signed main()
{
    long long int n,sum=0,t=0,i=0,cnt=0;
    cin>>n;
    while(n)
    {
        sum+=n%10*pow(2,i++);
        n/=10;
    }
    i=0;
    while(t<sum)
    {
        t=pow(4,i++);
        if(t>=sum) break;
        cnt++;
    }
    cout<<cnt;
}

 AC代码:

#include <iostream>
using namespace std;

int main()
{
    int cnt=0;
    string s,p="1";
    cin>>s;
    while(s.size()>=p.size())
    {
        if(s>p) cnt++;
        p+="00";
    }
    cout<<cnt;
}

★A16. Balanced Rating Changes

Problem - A - Codeforces

题意

由题可知 

  • ai为偶数 则bi=ai / 2
  • ai为奇数 因为题目保证最后和为0 说明ai为奇数的个数肯定为偶数个(因为奇数+奇数=奇数)那么只要一半人向上取整 另外一半向下取整
#include <iostream>
using namespace std;

int main()
{
    int n,x,flag=1;
    cin>>n;
    while(n--)
    {
        cin>>x;
        if(x%2) cout<<(x+flag)/2<<endl,flag*=-1;
        else cout<<x/2<<endl;
    }
}

rzt A17. Word Capitalization

Problem - A - Codeforces

题意

将首字母大写

#include<bits/stdc++.h>
using namespace std;

int main()
{
	string s;
	cin>>s;
	if(s[0]>='a'&&s[0]<='z') s[0]-=32;
	cout<<s;
}

rzt A18. Next Round 

Problem - A - Codeforces

 题意

第一行分别输入 n k

n代表参赛人数 k代表排名前k位的都能晋级(和第k位并列的也可以)

问有多少人能晋级

其中0分的不算在晋级里边

#include<bits/stdc++.h>
using namespace std;

bool cmp(int a,int b)
{
    return a>b;
}

int main()
{
	int n,k,cnt=0,s=0;
	cin>>n>>k;
	int a[n];
	for(int i=1;i<=n;i++)
        cin>>a[i];
    sort(a+1,a+n+1,cmp);

    for(int i=1;i<=n;i++)
       if(a[i]>=a[k]&&a[i]!=0) cnt++;

    cout<<cnt;
}

rzt A19. Young Physicist

Problem - A - Codeforces

题意

坐标矢量和为0 输出YES 否则输出NO

#include<bits/stdc++.h>
using namespace std;

typedef struct
{
    int x,y,z;
}sp;

int main()
{
	int n,xz=0,yz=0,zz=0;
	cin>>n;
	sp p[101];
	for(int i=0;i<n;i++)
    {
        cin>>p[i].x>>p[i].y>>p[i].z;
        xz+=p[i].x;
        yz+=p[i].y;
        zz+=p[i].z;
    }
    if(xz==0&&yz==0&&zz==0) cout<<"YES";
    else cout<<"NO";
}

rzt A20. Bit++

Problem - A - Codeforces

题意

输入n 

接下来n行输入字符串

x++和++x表示+1   x--和--x表示-1

输出结果 其中起始sum=0

#include<bits/stdc++.h>
using namespace std;

int main()
{
	string s;
	int n,sum=0;
	cin>>n;
	while(n--)
    {
        cin>>s;
        if(s[1]=='+') sum++;
        else sum--;
    }
    cout<<sum;
}

★A21. Case of the Zeros and Ones

Problem - A - Codeforces

题意

第一行输入n 表示字符串的长度

如果有1和0相连就删掉 问最后剩下几个字符

比如1100——10——空

再比如110010——1010——10——空

11110001——111001——1101——11——2个

因为10总是连在一块删掉的 所以只要配对的删掉 就是剩下的

所以要做的就是1和0配对 比如110010 ——3个1  3个0则都配对成功 所以剩下0个字符

#include<bits/stdc++.h>
using namespace std;

int main()
{
	string s;
	int n,a=0,b=0;
	cin>>n>>s;
	for(int i=0;i<n;i++)
        if(s[i]=='1') a++;
        else b++;
    cout<<fabs(a-b);
}

rzt A22. Translation

Problem - A - Codeforces

题意

字符串翻转就是对的 输出YES

其他情况都是 NO  这题用reverse函数就是秒解

#include<bits/stdc++.h>
using namespace std;

int main()
{
	string s,t;
	cin>>s>>t;
	reverse(s.begin(),s.end());
	if(s==t) cout<<"YES";
	else cout<<"NO";
}

★A23. String Task

Problem - A - Codeforces

题意

根据规则改字符串并输出

  • 把大写都改成小写
  • 遇到元音字母删除(a e i o u y)
  • 遇到辅音字母前加.字符

我刚开始想的是字符数组 太麻烦了 要加要减的操作都很麻烦

这题教会我一个方法就是——一边改变一边输出

遇到元音字母就跳过不管  遇到辅音字母就cout<<'.'<<s[i]

#include<bits/stdc++.h>
using namespace std;

int main()
{
	string s;
	cin>>s;
	for(int i=0;i<s.size();i++)
    {
        if(s[i]>='A'&&s[i]<='Z') s[i]+=32;
        if(s[i]!='a'&&s[i]!='e'&&s[i]!='i'&&s[i]!='o'&&s[i]!='u'&&s[i]!='y')
            cout<<'.'<<s[i];
    }
}

rzt A24. Laptops

Problem - A - Codeforces

题意

第一行输入n 代表n台电脑

题目说只要出现一台电脑质量比价格高 就输出“Happy Alex”

#include<bits/stdc++.h>
using namespace std;

int main()
{
	int n,x,y,flag=1;
	cin>>n;
	while(n--)
    {
        cin>>x>>y;
        if(x<y) flag=0;
    }
    if(flag)cout<<"Poor Alex";
    else cout<<"Happy Alex";
}

 ★A25. Left-handers, Right-handers and Ambidexters

Problem - A - Codeforces

题意

l代表有l个人只能用左手  r代表有r个人只能用右手  a代表有a个人既能用左手也能用右手

输出一个整数,代表这个队伍里最多有多少人,如果组不成这样的队伍,则输出0

思路

比如 6 2 7 先把右手不足的给他补上 变成6 6 3  然后再平均分配 7 7 1

此时这个1给谁都无所谓了因为结果就是 l 和 r 中最小的数×2

靠 刚开始写的呢代码简直就是if开会 下面这个代码跟第一次写的比起来简直通俗易懂

#include<bits/stdc++.h>
using namespace std;

int main()
{
	int l,r,a;
	cin>>l>>r>>a;
	while(a)
    {
        if(l>=r) r++;
        else l++;
        a--;
    }
    cout<<min(l,r)*2;
}

rzt A26. George and Accommodation 

Problem - A - Codeforces

题意

太弱智了 我都不想写题意哈哈

n代表房间数 接下来n行输入p——已住人数 q——房间容量

问有几间房能再塞下两个人

#include<bits/stdc++.h>
using namespace std;

int main()
{
	int n,p,q,cnt=0;
	cin>>n;
	while(n--)
    {
        cin>>p>>q;
        if(q-p>=2) cnt++;
    }
	cout<<cnt;
}

A27. Vasya the Hipster

Problem - A - Codeforces

题意

输入a代表红袜子个数 输入b代表蓝袜子个数

输出能有几天混穿 有几天能穿一双纯色

所以能混穿的天数就是a b小的值

剩下的除2就是穿纯色的天数

#include<bits/stdc++.h>
using namespace std;

int main()
{
	int a,b,minx,maxn;
	cin>>a>>b;
	maxn=max(a,b);
	minx=min(a,b);
	cout<<minx<<' '<<(maxn-minx)/2;
}

A28. Fox And Snake

Problem - A - Codeforces

题意

矩阵的控制 画蛇 调试就完事了

#include<bits/stdc++.h>
using namespace std;

int main()
{
	int m,n,flag=-1;
	cin>>m>>n;
	for(int i=1;i<=m;i++)
    {
        if(i%2==0) flag=-flag;
        for(int j=1;j<=n;j++)
        {
            if(i%2!=0) cout<<'#';
            else if(flag==1&&j==n)cout<<'#';
            else if(flag==-1&&j==1) cout<<'#';
            else cout<<'.';
        }
        cout<<endl;
    }
}

rzt A29. The New Year: Meeting Friends

Problem - A - Codeforces

题意

给三个数 在中间那个数汇合 问最大到中间和最小到中间的距离之和 其实就是最大-最小

#include<bits/stdc++.h>
using namespace std;

int main()
{
	int a[3];
	for(int i=0;i<3;i++)
        cin>>a[i];
    sort(a,a+3);
    cout<<a[2]-a[0];
}

A30. Elephant

Problem - A - Codeforces

题意

输入一个n 有1 2 3 4 5可以凑这个数 问如何用最少的个数凑n

要想有最少的个数 那就用最大的5去凑 通过规律推出三种情况

#include<bits/stdc++.h>
using namespace std;

int main()
{
	int n;
	cin>>n;
	if(n<=5) cout<<1;
	else if(n%5!=0) cout<<n/5+1;
	else cout<<n/5;
}

A31. Greg's Workout

Problem - A - Codeforces

题意

思路没啥问题 一直卡的点是因为数组开小了 我下标从1开始的 所以应该开a[n+1] 

#include<bits/stdc++.h>
using namespace std;

int main()
{
	int n,cnt=0,s1=0,s2=0,s3=0;
	cin>>n;
	int a[n+1];
	for(int i=1;i<=n;i++)
    {
        cin>>a[i];
        cnt++;
        if(cnt==1) s1+=a[i];
        else if(cnt==2) s2+=a[i];
        else {
            s3+=a[i];
            cnt=0;
        }
    }
    int maxn=max(max(s1,s2),s3);

    if(maxn==s1) cout<<"chest";
    else if(maxn==s2) cout<<"biceps";
    else cout<<"back";
}

rzt A32. Ultra-Fast Mathematician 

Problem - A - Codeforces

题意

给你两长度相同的字符串 要求做异或运算 其中1+1=0 1+0=1 0+0=0

#include<bits/stdc++.h>
using namespace std;

int main()
{
	string s1,s2;
	cin>>s1>>s2;
	for(int i=0;i<s1.size();i++)
    {
        if(s1[i]-'0'+s2[i]-'0'==1) cout<<1;
        else if(s1[i]-'0'+s2[i]-'0'==0) cout<<0;
        else cout<<0;
    }
}

★A33. Little Pony and Crystal Mine

Problem - A - Codeforces

题意

打印题 让我想起天梯赛的打印沙漏 真是可怕

#include<bits/stdc++.h>
using namespace std;

int main()
{
	int n,t=1,i,j;
	cin>>n;
	for(i=1;i<=n/2+1;i++)
    {
        for(j=1;j<=(n-t)/2;j++) cout<<'*';
        for(j=1;j<=t;j++) cout<<'D';
        for(j=1;j<=(n-t)/2;j++) cout<<'*';
        t+=2;
        cout<<endl;
    }
    t-=4;
    for(i=1;i<=n/2;i++)
    {
        for(j=1;j<=(n-t)/2;j++) cout<<'*';
        for(j=1;j<=t;j++) cout<<'D';
        for(j=1;j<=(n-t)/2;j++) cout<<'*';
        t-=2;
        cout<<endl;
    }
}

A34. One-dimensional Japanese Crossword

Problem - A - Codeforces

题意

例如BWBBBWWBW 有三组B 这三组B的个数分别是1 3 1

所以输出就是

3

1 3 1 

思路就是找子串 其他的也没啥难度

#include<bits/stdc++.h>
#define int long long
using namespace std;

signed main()
{
	int n,cnt=0,sum=0,k=0;
	string s;
	cin>>n;
	cin>>s;
	int a[n];
	
	for(int i=0;i<n;i++)
        if(s[i]=='B')
        {
            sum++;
            if(s[i+1]=='W'||s[i+1]=='\0') cnt++,a[k++]=sum,sum=0;
        }
        
    cout<<cnt<<endl;
    for(int i=0;i<cnt;i++)
        cout<<a[i]<<' ';
}

rzt A35. Soldier and Bananas

Problem - A - Codeforces

题意

#include<bits/stdc++.h>
using namespace std;

int main()
{
	int k,n,w,sum=0;
	cin>>k>>n>>w;
	for(int i=1;i<=w;i++)
        sum+=k*i;
    if(sum>n) cout<<sum-n;
    else cout<<0;
}

A36. Bus to Udayland

https://codeforces.com/contest/711/problem/A

题意

有n排座位,每排座位包含左右两部分,被 |分隔,其中O代表没人坐,X代表有人坐。 问你是否存在连续的两个座位没人坐,存在输出YES,并把这两个座位改为++。 输出修改以后的情况,不存在输出NO

#include <iostream>
using namespace std;

int main()
{
    int n,i,j,flag=0;
    char s[1010][8];
    cin>>n;
    for(i=0;i<n;i++)
        for(j=0;j<5;j++)
    {
        cin>>s[i][j];
        if(s[i][0]=='O'&&s[i][1]=='O'&&flag!=1)
        {
            flag=1;
            s[i][0]='+',s[i][1]='+';
        }else if(s[i][3]=='O'&&s[i][4]=='O'&&flag!=1)
        {
            flag=1;
            s[i][3]='+',s[i][4]='+';
        }
    }
    if(!flag) cout<<"NO";
    else
    {
        cout<<"YES"<<endl;
        for(i=0;i<n;i++)
        {
            for(j=0;j<5;j++)
                cout<<s[i][j];
            cout<<endl;
        }
    }
}

A37. Cookies

https://codeforces.com/contest/129/problem/A

题意

有n袋饼干(1≤n≤100),每袋里有1≤ai​≤100块饼干。拿走一袋饼干,使剩下的饼干数为偶数。求有多少种拿走的方案。

思路

只要存在奇数个奇数 则需要拿走奇数的饼干

偶数个奇数和为偶数 那么拿走偶数的饼干即可

#include <iostream>
using namespace std;

int main()
{
    int n,x,even=0,odd=0;
    cin>>n;
    for(int i=0;i<n;i++)
    {
        cin>>x;
        if(x%2==0) even++;
        else odd++;
    }
    if(odd%2==0) cout<<even;
    else cout<<odd;
}

A38. Second Order Statistics

https://codeforces.com/contest/22/problem/A

题意

给定一个数组,输出其中第二小的整数(相等的整数只计算一次)

用set很好做 只要把第一个删掉 再用s.begin()就行

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

int main()
{
    set<int>s;
    int n,x;
    cin>>n;
    int t=n;
    while(n--)
    {
        cin>>x;
        s.insert(x);
    }
    if(t<2||s.size()==1)
    {
        cout<<"NO";
        return 0;
    }
    s.erase(s.begin());
    cout<<*s.begin();
}

rzt A39. Nearly Lucky Number

https://codeforces.com/contest/110/problem/A

题意

如果一个数仅包含4和7,那么它就是一个"幸运数字"。 如果一个数本身不是幸运数,但是它所含有的数字4和7的个数之和为一个"幸运数字",那么它就是一个"类幸运数字"。 给您一个数,请编程判断它是不是"类幸运数字"。

#include <iostream>
using namespace std;

int main()
{
    string s;
    int cnt=0;
    cin>>s;
    for(int i=0;i<s.size();i++)
    {
        if(s[i]=='4'||s[i]=='7') cnt++;
    }
    if(cnt!=0&&(cnt==4||cnt==7)) cout<<"YES";
    else cout<<"NO";
}

rzt A40. Playing with Dice

https://codeforces.com/contest/378/problem/A

题意

两个人正在玩游戏。每人写一个 1~6 之间的数,然后掷骰子。写下的数字和骰子上的数最接近的那个人获胜。如果两个人写的数和骰子上的数差距都是一样的,那么是平局。

第一个人写的数是 a,第二个人写的数是 b。 请分别输出第一个人赢、平局、第二个人赢有多少种可能(方法数)。

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

int main()
{
    int a,b,aw=0,bw=0,dr=0;
    cin>>a>>b;
    for(int i=1;i<=6;i++)
    {
        if(abs(a-i)<abs(b-i)) aw++;
        else if(abs(a-i)==abs(b-i)) dr++;
        else bw++;
    }
    cout<<aw<<' '<<dr<<' '<<bw;
}

rzt A41. A Good Contest

https://codeforces.com/contest/681/problem/A

题意

如果出现比赛之前即为红色等级(分>=2400)且分数有长进的 输出YES

#include <iostream>
using namespace std;

typedef struct
{
    string s;
    int a;
    int b;
}stu;

int main()
{
    stu p[101];
    int n,flag=0;
    cin>>n;
    for(int i=0;i<n;i++)
    {
        cin>>p[i].s>>p[i].a>>p[i].b;
        if(p[i].a>=2400&&p[i].b-p[i].a>0)
            flag=1;
    }
    if(flag) cout<<"YES";
    else cout<<"NO";
}

A42. Beautiful Year

https://codeforces.com/contest/271/problem/A

题意

给定一个年份n,输出大于n的第一个四位数字都不相同的年份。

这题是天梯赛L1 出生年的降级版哈哈

#include <iostream>
using namespace std;

int main()
{
    int y,a[4];
    cin>>y;
    while(1)
    {
        y++;
        a[0]=y/1000;
        a[1]=y/100%10;
        a[2]=y/10%10;
        a[3]=y%10;

        if(a[0]!=a[1]&&a[0]!=a[2]&&a[0]!=a[3]&&a[1]!=a[2]&&a[1]!=a[3]&&a[2]!=a[3])
            break;
    }
    cout<<y;
}

★A43. Far Relative’s Birthday Cake

https://codeforces.com/contest/629/problem/A

题意

输入格式:

第一行输入一个整数n(1<=n<=100),表示蛋糕边的长度。然后输入n行数,每行有n个字符。空的细胞用'.'表示,而含有巧克力的细胞用“C”表示。

输出格式:

输出“家庭之门”幸福感的价值,即同一行或同一列的一对巧克力片的数量

思路

注意:像C C C这种序列 一对巧克力的数量应该是3对  (1,2)(1,3)(2,3)

所以也就是高斯求和公式n*(n-1)/2 

其实找规律也可以得出:3个C=2+1   4个C=3+2+1   5个C=4+3+2+1

则用一个双for 同时记录每一行每一列C的个数 然后用高斯求和公式计算求和即可

#include <iostream>
using namespace std;

int main()
{
    int n,i,j,h,l,sum=0;
    char s[101][101];
    cin>>n;
    for(i=0;i<n;i++)
        for(j=0;j<n;j++)
            cin>>s[i][j];

    for(i=0;i<n;i++)
    {
        h=0,l=0;
        for(j=0;j<n;j++)
        {
            if(s[i][j]=='C') l++; //代表每列的C的个数
            if(s[j][i]=='C') h++; //代表每行的C的个数
        }
        sum+=(l-1)*l/2+(h-1)*h/2;
    }
    cout<<sum;

}

★A44. Mashmokh and Lights

https://codeforces.com/contest/415/problem/A

题意

有编号为1 - n共n个灯。按下i号开关后,所有编号≥i的灯都会被关掉。给出n, m两个数,分别表示灯的数量和按下的开关数,输出每个灯被第一次关掉时开关的编号。

#include <iostream>
using namespace std;

int main()
{
    int n,m,x;
    cin>>n>>m;
    int a[101]={0};
    while(m--)
    {
        cin>>x;
        for(int i=x;i<=n;i++)
            if(a[i]==0) a[i]=x;
    }
    for(int i=1;i<=n;i++)
        cout<<a[i]<<' ';
}

rzt A45. Triangular numbers

#include <iostream>
using namespace std;

int main()
{
    int n,i;
    cin>>n;
    for(i=1;i<32;i++)
        if(i*(i+1)/2==n)
        {
            cout<<"YES";
            return 0;
        }
    cout<<"NO";
}

rzt A46. Roma and Lucky Numbers

https://codeforces.com/contest/262/problem/A?f0a28=1

题意

刚开始没看清题 意思是4和7是幸运数字

n指给出n个数 问有几个数满足幸运数字出现次数<=k

输出满足条件的个数

#include <iostream>
using namespace std;

int main()
{
    int n,k,sum=0;
    string s;
    cin>>n>>k;
    while(n--)
    {
        int cnt=0;
        cin>>s;
        for(int i=0;i<s.size();i++)
            if(s[i]=='4'||s[i]=='7') cnt++;
        if(cnt<=k) sum++;
    }
    cout<<sum;
}

 

★A47. Toy Army

https://codeforces.com/contest/84/problem/A

题意

这题说实话 没看懂题是啥意思……待补

#include<iostream>
using namespace std;
long long n;

int main()
{
    cin>>n;
    cout<<n/2*3;
}

A48. Levko and Table

https://codeforces.com/contest/361/problem/A

题意

Levko 很喜欢幻方,他想构造一个长宽都是 n 且每行每列的和都是 k 的幻方

spj题  要满足每行每列和都为k 最简单的方法就是对角线是k

#include <iostream>
using namespace std;

int main()
{
    int n,k,a[101][101];
    cin>>n>>k;
    for(int i=0;i<n;i++)
    {
         for(int j=0;j<n;j++)
         {
            if(i==j) a[i][j]=k;
            else a[i][j]=0;
            cout<<a[i][j]<<' ';
         }
         cout<<endl;
    }
}

 

★A49. Cards

https://codeforces.com/contest/701/problem/A

题意

现在有n张卡牌(n为偶数),每张卡牌上都写着一个正整数。有n/2个人要玩这个卡牌游戏,在游戏开始时每个人会得到两张卡牌,每张卡牌只能给一个玩家。 现在让你发卡牌,使每一个人手上的卡片上所写的数字的总和相等。数据保证有发牌的方案符合题目要求。

思路

因为题目保证肯定能凑 所以直接sort排序

然后两头取就ok了  注意用结构体记录原序列的下标

毕竟答案要求输出的是原序列的下标

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

typedef struct
{
    int idx,val;
}st;

bool cmp(st a,st b)
{
    return a.val<b.val;
}

int main()
{
    st a[101];
    int n;
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>a[i].val;
        a[i].idx=i;
    }

    sort(a+1,a+n+1,cmp);
    for(int i=1;i<=n/2;i++)
        cout<<a[i].idx<<' '<<a[n+1-i].idx<<endl;
}

 

A50. Wizards' Duel

https://codeforces.com/contest/591/problem/A

题意

第一行输入一个整数 l (1<=l<=1000 )-----走廊长度

第二行输入正整数 p ,第三行输入正整数 q -----分别代表哈利波特与伏地魔施展的魔法的飞行速度。

输出一个正数-----从哈利波特的位置到两个咒语第二次碰撞位置的距离。

思路

画个图发现其实第二次碰撞就是第一次碰撞的位置

所以用时间t=l/(a+b) 乘以哈利的魔法速度a即可

#include <iostream>
#include <stdio.h>
using namespace std;

int main()
{
    double l,a,b;
    cin>>l;
    cin>>a;
    cin>>b;
    printf("%f",l/(a+b)*a);
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值