有关csp自我反思

首先说说体会把

这次前几个都是模拟,最后一道题以为自己可能会结果是半吊子根本不会,导致浪费了三个小时写第五题只有十分
如果不畏惧字符串而专心的写第三题的话,应该结果会不一样把。希望下次能好好考
第一题就是个简单的报数
#include <bits/stdc++.h>

using namespace std;

int ans[4] = {0};

int judge(int x)
{
    int last = 0;
    if(x%7==0)
        return 1;
    else
    {
        while(x>0)
        {
            last = x%10;
            x/=10;
            if(last==7)
                return 1;
        }
    }
    return 0;
}
int main()
{
   // ios::sync_with_stdio(false);
   int n;
   int num = 0;
   cin>>n;
   for(int i=1; num<n; i++)
   {
        if(judge(i))
        {
            ans[(i-1)%4]++;
        }
        else
        {
            num++;
        }
   }
   for(int i=0; i<4; i++)
    cout<<ans[i]<<endl;

    return 0;
}
第二题。考试的时候太毛躁了,其实直接暴力搜索就好了,心态真的太差了
浪费自己的时间,主要还是自己太菜了
#include <bits/stdc++.h>

using namespace std;

struct Point{
    int x,y;

    Point(const Point& b)
    {
        x = b.x;
        y = b.y;
    }
    Point()
    {

    }
    Point(int a, int b)
    {
        x=a;
        y=b;
    }
    const bool operator <(Point b) const
    {
        return x==b.x?y>b.y:x>b.x;
    }
};

//int valid[3000][3000]={0};
int ans[5] = {0};

priority_queue<Point> q;

vector<Point> g[3000];

void judge(Point a, int i, int j) //判断是否合法
{
    int flag[4] = {0};//看是不是一个合法的点,得找他的,上下左右
    int score=0;
    for(int m = 0; m<g[i-1].size(); m++)
    {
        if(g[i-1][m].x==(a.x-1)&&g[i-1][m].y==a.y)
            flag[0] = 1;
        if(g[i-1][m].x==(a.x-1)&&g[i-1][m].y==(a.y+1))
           score++;
        if(g[i-1][m].x==(a.x-1)&&g[i-1][m].y==(a.y-1))
           score++;

    }
     for(int m = 0; m<g[i].size(); m++)
    {
        if(g[i][m].y==(a.y+1))
            flag[1] = 1;
        if(g[i][m].y==(a.y-1))
            flag[2] = 1;
    }
     for(int m = 0; m<g[i+1].size(); m++)
    {
        if(g[i+1][m].x==(a.x+1)&&g[i+1][m].y==a.y)
            flag[3] = 1;
        if(g[i+1][m].x==(a.x+1)&&g[i+1][m].y==(a.y+1))
            score++;
        if(g[i+1][m].x==(a.x+1)&&g[i+1][m].y==(a.y-1))
            score++;
    }

    for(int m=0; m<4; m++)
       if(!flag[m])
        {
           // valid[i][j] =0
           //cout<<flag[m]<<" ";
            return ;
        }
    ans[score]++;
    //cout<<score<<endl;
}


int main()
{
    int n;
    cin>>n;
    int x;
    int y;
    for(int i=0; i<n; i++)
    {
        cin>>x>>y;
       q.push(Point(x,y));
    }
    int raw = 0;
    Point to = q.top();
    g[raw].push_back(to);
    //cout<<to.x<<" "<<to.y<<endl;
    int curx = to.x;
    q.pop();
    while(!q.empty())
    {
        to = q.top();
        //cout<<to.x<<" "<<to.y<<endl;
        q.pop();
        if(curx!=to.x) //代表在另外的行了
        {
            raw++;
            curx = to.x;
            g[raw].push_back(to);
        }
        else{
            g[raw].push_back(to);
        }
    }
    //现在已经存起来了
    //开始判断结果,先排序
    if(raw<2)
    {
        //cout<<"11"<<endl;
        cout<<"0"<<endl;
        cout<<"0"<<endl;
        cout<<"0"<<endl;
        cout<<"0"<<endl;
        cout<<"0"<<endl;
    }
    else
    {
        //cout<<raw<<endl;
        //for(int i=0; i<=raw; i++)
         //   sort(g[i].begin(),g[i].end());
        for(int i=1; i<=raw-1; i++)
        {
            //cout<<g[i].size()<<endl;
            for(int j=1; j<g[i].size()-1; j++)
            {
                //cout<<"diaoyonfg"<<endl;
                judge(g[i][j],i,j);
            }
        }
        for(int i=0; i<5; i++)
            cout<<ans[i]<<endl;
    }
    return 0;
}

/*
7
1 2
2 1
0 0
1 1
2 0
0 1
1 0

11
9 10
10 10
11 10
12 10
13 10
11 9
11 8
12 9
10 9
10 11
12 11
*/
第三题是个字符串,当时想用dfs来做,但是我是真的不喜欢做字符串的题,于是直接写了前两个样例点的就看后面的了
第四题没仔细看,直接看第五题,觉得自己会,想骗分,结果模两次不满足分配律,直接凉凉

最后总分230,下次再来,凉凉。 下次一定好好做第三题

上一篇:23-Node.js学习笔记-Express-请求处理-静态资源的处理


下一篇:查询文件的第几行