暑假训练赛

A......找ABC就行了

第五次比赛 - Virtual Judge (vjudge.net)

#include <bits/stdc++.h>
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
#include <cmath>
//#define int long long
using namespace std;
const int N=2e5+5;

int vis[N];

int32_t main() {
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    int n;
    cin>>n;
    string s;
    cin>>s;
    int ans=0;
    for(int i=0;i<n;i++)
    {
        if(s[i]=='A'&&vis['A']!=1)
        {
            ans++;
            vis['A']=1;
        }
        if(s[i]=='B'&&vis['B']!=1)
        {
            ans++;
            vis['B']=1;
        }
        if(s[i]=='C'&&vis['C']!=1)
        {
            ans++;
            vis['C']=1;
        }
        if(ans==3)
        {
            cout<<i+1;
            break;
        }
    }
    return 0;
}

 

B......结构体排序,注意读题,读假题直接废

第一个条件就是  1价格要是小的

  2功能要是对方的有的全部

 坑点就是第三条,要么价格小于并且功能数相等,如果两个价格等于那么你的功能数就要大于它

 

#include <bits/stdc++.h>
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
#include <cmath>
#define int long long
using namespace std;
const int N=100+7;
struct G{
    int p;
    int c;
    int a[N];
}s[N];
bool cmp(G x,G y){
    if(x.p==y.p)
    {
        return x.c>y.c;
    }
    return x.p<y.p;
}
int32_t main()
{
    int n,m;
    cin>>n>>m;
    for(int i=1;i<=n;i++)
    {
        cin>>s[i].p >> s[i].c;
        for(int j=1;j<=s[i].c;j++)
        {
            int b;
            cin>>b;
            s[i].a[b]=1;
        }
    }
    sort(s+1,s+n+1,cmp);
    int f=0;
    for(int i=1;i<=n;i++)
    {

        for(int j=i+1;j<=n;j++)
        {
            if((s[i].c==s[j].c&&s[i].p<s[j].p)||(s[i].c>s[j].c&&s[i].p<=s[j].p))
            {
                int ans=0;
                for(int k=1;k<=m;k++)
                {
                    if(s[j].a[k]==1&&s[i].a[k]==1)
                    {
                        ans++;
                    }
                }
                if(ans==s[j].c)
                {
                    f=1;
                    break;
                }
            }
            else
            {
                continue;
            }
        }
    }
    if(f)
    {
        cout<<"Yes";
    }
    else
    {
        cout<<"No";
    }
    return 0;
}

 

C     题意就是找全部人都有空的连续的天数

直接一列列的跑就行

#include <bits/stdc++.h>
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
#include <cmath>
//#define int long long
using namespace std;
const int N=1000+5;

int vis[N];
char a[N][N];
int32_t main() {
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    int n,d;
    cin>>n>>d;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=d;j++)
        {
            cin>>a[i][j];
        }
    }
    int ans=0;
    int ma=0;
    for(int i=1;i<=d;i++)
    {
        int sum=0;
        for(int j=1;j<=n;j++)
        {
            if(a[j][i]=='x')
            {
                ans=0;
                sum=0;
                break;
            }
            else {
                sum++;
            }
        }
        if(sum==n)
        {
            ans++;
        }
        ma=max(ans,ma);
    }
    cout<<ma;
    return 0;
}

 

D  一道简单的字符串反转

TLE暴力写法

 

#include <bits/stdc++.h>
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
#include <cmath>

#define int long long
using namespace std;
const int N=2e5+7;
const int INF = 0x3f3f3f3f;
const int mod=998244353;
double h,c;
double T;

string a[N];
int vis[N];
int32_t main() {
    ios::sync_with_stdio(false);
    cin.tie(0), cout.tie(0);

    int n;
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>a[i];
    }
    int ans=1;
    vis[1]=1;
    for(int i=1;i<=n;i++)
    {

        if(!vis[i]) ans++;
        for(int j=i+1;j<=n;j++)
        {
            string s=a[i];
            reverse(a[i].begin(),a[i].end());
            if(a[j]==s || a[j]==a[i])
            {
                vis[j]=1;
            }
        }
    }
    cout<<ans<<endl;
    return 0;
}

 

换掉一个循环

#include <bits/stdc++.h>
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
#include <cmath>

#define int long long
using namespace std;
const int N=2e5+7;
const int INF = 0x3f3f3f3f;
const int mod=998244353;
double h,c;
double T;

string a[N];
set<string> l;
int32_t main() {
    ios::sync_with_stdio(false);
    cin.tie(0), cout.tie(0);

    int n;
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>a[i];
    }
    for(int i=1;i<=n;i++)
    {
        string s=a[i];
        reverse(a[i].begin(),a[i].end());
        l.insert(min(s,a[i]));
    }
    cout<<l.size()<<endl;
    return 0;
}

E     题意就是找环然后在输出相应顺序的环就行了

跑一遍环,一旦发现重复就立刻跳出,然后do从环的起点一个个跑出来就行了

#include <bits/stdc++.h>
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
#include <cmath>
//#define int long long
using namespace std;
const int N=2e5+5;

int a[N];
int b[N];
int vis[N];
int32_t main() {
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    int n;
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>a[i];
    }
    int k=1;
    while (!vis[k])
    {
        vis[k]= 1;
        k=a[k];
    }
    int j=k;
    vector<int> q;
    do {
        q.push_back(a[j]);
        j=a[j];
    } while (j!=k);
    cout<<q.size()<<"\n";
    for(auto l : q)
    {
        cout<< l <<" ";
    }
    return 0;
}

 

F    模板广搜,一个点狂搜,然后在标记就行了

#include <bits/stdc++.h>
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
#include <cmath>
//#define int long long
using namespace std;
const int N=200+7;
int n,m;
char a[N][N];
int ans=0;

int b[N][N];
bool vis[N][N];

int dx[] = {0,0,-1,1};
int dy[] = {-1,1,0,0};
struct G{
    int x,y;
}k;

void dfs()
{
    k.x=2,k.y=2;
    vis[k.x][k.y]= true;
    b[k.x][k.y]=1;
    queue<G> q;
    q.push(k);
    while (!q.empty())
    {
        G mo = q.front();
        q.pop();

        for(int i=0;i<4;i++)
        {
            int xx,yy;
            xx=mo.x;
            yy=mo.y;
            while (a[xx][yy]=='.')
            {
                b[xx][yy]=1;
                xx+=dx[i];
                yy+=dy[i];
            }
            xx-=dx[i];
            yy-=dy[i];
            if(!vis[xx][yy])
            {
                vis[xx][yy]= true;
                q.push({xx,yy});
            }

        }
    }
}

int32_t main() {
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);

    cin>>n>>m;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            cin>>a[i][j];
        }
    }
    dfs();
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            if(b[i][j]) ans++;
        }
    }
    cout<<ans;
    return 0;
}

 

posted @ 2023-08-03 15:04  whatdo+  阅读(29)  评论(0编辑  收藏  举报