ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

ccf-csp:201803

2022-03-19 16:33:26  阅读:156  来源: 互联网

标签:cnt return int flag num ccf 201803 csp


今天模拟的是2018年三月份的csp,这次题目也是比较简单(要是现在的csp还是以前的难度就好了~~~~),前两题不说了很简单,第三题是一个模拟题,难点在于字符串的处理,这道题我拿了80分,时间到了实在是改不出来了~~~,第四题就是一个简单地dfs就出来了,第五题我拿了暴力的40分,一共拿了100+100+80+100+40=420~~~~~

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ruh5Zyw6YO95piv5YWt5L6_5aOr5LuW5Y205oqs5aS055yL5ZCR5LqG5pyI5Lqu,size_12,color_FFFFFF,t_70,g_se,x_16

通过这几次模拟考试发现,考场上选择做题的顺序以及考试时候的心态真的十分重要!!!还有考试的细心程度!!!!其实四个小时并不算短,因此如果一道题卡了一会也不要慌,当下最紧要的是做明智的决定,是决定换一道题还是在思考一会,千万记得不要被沉没成本所影响!!!!

最后贴一下这次模拟考试的题目和代码

201803-1跳一跳

代码如下:

#include <iostream>using namespace std;int ans,num;int main(){    int a;    while(cin>>a)    {        if(a==0) break;        if(a==1) num=1;        else if(a==2)        {            if(num==1) num=2;            else num+=2;        }        ans+=num;    }    cout<<ans;    return 0;}
201803-2碰撞的小球

代码如下:

#include <bits/stdc++.h>using namespace std;int n,l,t;struct node{int id,pos;} a[110];int b[110],v[110];bool cmp(node c,node d){    return c.pos<d.pos;}int main(){    cin>>n>>l>>t;    for(int i=1;i<=n;i++)    {        cin>>a[i].pos;        a[i].id=i;    }    sort(a+1,a+n+1,cmp);    a[n+1].pos=l,a[0].pos=0;    fill(v+1,v+n+1,1);    for(int i=1;i<=n;i++) b[a[i].id]=i;    for(int i=0;i<=t;i++)    {        for(int j=1;j<=n;j++)        {            if(i==0)            {                if(a[j].pos==a[j-1].pos||a[j].pos==a[j+1].pos) v[j]=-v[j];                continue;            }            a[j].pos+=v[j];            if(a[j].pos==a[j-1].pos||a[j].pos==(a[j+1].pos+v[j+1]))            {                v[j]=-v[j];                //cout<<"sudu  "<<j<<endl;            }        }    }    for(int i=1;i<=n;i++) cout<<a[b[i]].pos<<" ";    return 0;}
201803-3URL映射

这个只拿了80分,还有些细节没注意到~~~

代码如下:

#include <bits/stdc++.h>using namespace std;string s[110],na[110];vector<string> ans;string ss;int n,m,cnt;bool func1(string sss){    int k=cnt;    if(sss=="<int>")    {        int flag=0;        for(;cnt<ss.size();cnt++)        {            if(ss[cnt]=='/') break;            if(ss[cnt]<'0'||ss[cnt]>'9')            {                flag=0;break;            }            else flag=1;        }        cnt++;        if(!flag) return false;        else        {            for(int i=k;i<cnt;i++)            {                if(ss[i]!='0')                {                    ans.push_back(ss.substr(i,cnt-i-1));                    break;                }            }             return true;        }    }    if(sss=="<str>")    {        int flag=0;        for(;cnt<ss.size();cnt++)        {            if(ss[cnt]=='/') break;            flag=1;        }        cnt++;        if(!flag) return false;        else        {            ans.push_back(ss.substr(k,cnt-k-1));            return true;        }    }    if(sss=="<path>")    {        if(cnt<ss.size())        {            ans.push_back(ss.substr(cnt));            cnt=ss.size();            return true;        }        else return false;    }    string tem="";    for(int i=0;i<sss.size();i++)    {        if(ss[cnt]==sss[i]) cnt++;        else        {            return false;        }    }    if(cnt<ss.size()&&ss[cnt]!='/') return false;    else    {        cnt++;        return true;    }}void func(){    int flag=0;    for(int i=1;i<=n;i++)    {        int k=1,ll=s[i].size();        cnt=1;        for(int j=1;j<ll;j++)        {            if(s[i][j]!='/')            {                if(cnt>=ss.size()) break;            }            if(s[i][j]=='/')            {                string s1=s[i].substr(k,j-k);                //cout<<s1<<endl;                k=j+1;                if(!func1(s1)) break;            }            if(j==ll-1)            {                if(s[i][j]!='/')                {                    string s1=s[i].substr(k);                    if(!func1(s1)) break;                    else                    {                        if(ss[ss.size()-1]!='/') flag=i;                    }                }                else                {                    if(ss[ss.size()-1]=='/')flag=i;                }            }        }        if(cnt<ss.size()) flag=0;        if(flag) break;        ans.clear();    }    if(flag)    {        cout<<na[flag]<<" ";        for(int i=0;i<ans.size();i++) cout<<ans[i]<<" ";        cout<<endl;    }    else cout<<404<<endl;}int main(){    cin>>n>>m;    for(int i=1;i<=n;i++) cin>>s[i]>>na[i];    while(m--)    {        cin>>ss;        int flag=1;        for(int i=0;i<ss.size();i++)        {            if(ss[i]=='?')            {                flag=0;                break;            }        }        if(!flag)        {            cout<<404<<endl;            continue;        }        func();    }    return 0;}
201803-4棋局评估

代码如下:

#include <iostream>using namespace std;int g[4][4];int t;bool check(int x){    if(g[1][1]==x&&g[2][2]==x&&g[3][3]==x) return true;    if(g[3][1]==x&&g[2][2]==x&&g[1][3]==x) return true;    for(int i=1;i<=3;i++)    {        if(g[i][1]==x&&g[i][2]==x&&g[i][3]==x) return true;        if(g[1][i]==x&&g[2][i]==x&&g[3][i]==x) return true;    }    return false;}int score(int x){    int res=1;    for(int i=1;i<=3;i++)    {        for(int j=1;j<=3;j++)        {            if(!g[i][j]) res++;        }    }    if(x==1) return res;    else return -res;}int dfs(int x){    if(check(1))return score(1);    else if(check(2)) return score(2);    else if(score(1)==1) return 0;    int maxx=-10,minn=10;    for(int i=1;i<=3;i++)    {        for(int j=1;j<=3;j++)        {            if(g[i][j])continue;            if(x==1)            {                g[i][j]=1;                maxx=max(maxx,dfs(2));                g[i][j]=0;            }            else            {                g[i][j]=2;                minn=min(minn,dfs(1));                g[i][j]=0;            }        }    }    if(x==1) return maxx;    else return minn;}int main(){    cin>>t;    while(t--)    {        for(int i=1;i<=3;i++)        {            for(int j=1;j<=3;j++)            {                cin>>g[i][j];            }        }        cout<<dfs(1)<<endl;;    }    return 0;}
01803-5次求和

关于第五题我想说以前的csp是真的香啊,暴力破解能拿40分!!!!对比上一次的csp(2021年 12月份的)第五题暴力12分,,,不得不说好怀念以前的csp啊啊啊~~~~

代码如下:

#include <bits/stdc++.h>using namespace std;#define ll unsigned long longconst int N=1e5+10;const int mod=1e9+7;ll a[N];vector<int>adj[N];vector<int>ans;int ans1[N];int t,n,m,l,r;int u0,v0;ll d;bool dfs(int fa,int u){    if(u==v0) return true;    for(int i=0;i<adj[u].size();i++)    {        int v=adj[u][i];        if(v==fa)continue;        if(dfs(u,v))        {            ans.push_back(v);            return true;        }    }    return false;}void func(){    for(int i=0;i<ans.size();i++)    {        int u=ans[i];        a[u]=(a[u]+d)%mod;    }    ll anss=0;    for(int i=1;i<=n;i++)    {        anss=(anss+ans1[i]*a[i]%mod)%mod;    }    cout<<anss<<endl;}void dfs1(int fa,int s,int u,int num){    if(num>=l&&num<=r&&s<=u)    {        for(int i=0;i<ans.size();i++)        {            ans1[ans[i]]++;        }    }    if(num>=r) return;    for(int i=0;i<adj[u].size();i++)    {        int v=adj[u][i];        if(v==fa) continue;        ans.push_back(v);        dfs1(u,s,v,num+1);        ans.pop_back();    }}int main(){    cin>>t;    while(t--)    {        cin>>n>>m>>l>>r;        for(int i=1;i<=n;i++) cin>>a[i];        for(int i=2;i<=n;i++)        {            int u1;            cin>>u1;            adj[u1].push_back(i);            adj[i].push_back(u1);        }        for(int i=1;i<=n;i++)        {            ans.clear();            ans.push_back(i);            dfs1(-1,i,i,1);        }        while(m--)        {            cin>>u0>>v0>>d;            ans.clear();            ans.push_back(u0);            dfs(-1,u0);            func();        }        fill(ans1,ans1+n+1,0);        for(int i=1;i<=n;i++) adj[i].clear();    }    return 0;}

 

 

标签:cnt,return,int,flag,num,ccf,201803,csp
来源: https://blog.csdn.net/m0_46241477/article/details/123596710

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有