csp模测3

A

image.png

分析:

就是签到题orz,遇到和前一个不一样的数,answer就++;

#include
using namespace std;
int main()
{
    int k;cin>>k;
    int c;cin>>c;
    int temp;
    int sum=1;
    for(int i=1;i>c;
        if(c!=temp) sum++;
    }
    cout<

B

image.png

思路:

分开横竖去判断两轮,最后合在一起,其实就是个模拟的过程

#include
using namespace std;
int kl[35][35];
int xiao1[35][35];
int xiao2[35][35];
int main()
{
    int n,m;cin>>n>>m;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            cin>>kl[i][j];
            xiao1[i][j]=1;
            xiao2[i][j]=1;
        }   
    }
    int left1;int right1;
    int left2;int right2;
    for(int i=1;i<=n;i++)
    {
        left1=right1=1;
        left2=right2=1;
        for(int j=2;j<=m;j++)
        {
            if(kl[i][j]==kl[i][j-1])
            {
                right1++;
            }
            if(kl[i][j]!=kl[i][j-1])
            {
            //  cout<<"he"<=3)
                {
                //  cout<=3)
                {
                //  cout<=3)
                {
                    //cout<=3)
                {
                //  cout<
image.png

image.png

这个题就比较麻烦了。开始写的模拟居然爆0 QAQ。
其实考虑一下,不满足条件的字段就是AB ABBBB。。。 BA BAAAA。。然后全部的子串数量是有公式算出来
然后为了减少时间复杂度。需要在代码种一次循环找到所有的这些子串数量。
代码如下

#include
#include
#include
#include
using namespace std;
int c[2000000][2];
string x;
int w=0;
bool panduan(int x1,int y1)
{
    bool ok=1;
    int middle=(x1+y1)/2;
    int cs=0;
    for(int i=x1;i<=middle;i++)
    {
        if(x[x1]!=x[y1-cs]) 
        {
            ok=0;break;
        }
    }
    if(ok)
    {
        c[w][0]=x1;c[w][1]=y1;
        w++;
    }
    else return 0;
}
int main()
{
    int n;
    cin>>n; 
    cin>>x;
    int left=0;int right=1;
    while(leftn-1)
        {
            left++;
            right=left+1;
        }
    }
    int sum=0;
    

    int lf,rt;
    for(int i=0;irt) 
            {
                sum++;
                rt=c[j][1];
            }
            else break;
        }
    }
    cout<

你可能感兴趣的:(csp模测3)