其他分享
首页 > 其他分享> > ccf-csp:201803

ccf-csp:201803

作者:互联网

今天模拟的是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