首页 > 其他分享 >暑假训练赛

暑假训练赛

时间:2023-08-03 15:12:29浏览次数:50  
标签:const int cin long 训练赛 暑假 tie include

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;
}

 

标签:const,int,cin,long,训练赛,暑假,tie,include
From: https://www.cnblogs.com/whatdo/p/17603403.html

相关文章

  • 暑假集训D9 2023.8.2 补题
    A.「EZEC-10」排列排序给你一个长度为\(n\)的排列\(p_1,p_2,\cdots,p_n\)。你需要把它排序。每次可以花区间长度,即\(r-l+1\)的代价,选择排列中的任意一段区间\([l,r]\),并将\([l,r]\)从小到大排序。现在你可以让他进行若干次这个操作,直到\(p\)中元素的值从\(1\)到......
  • 暑假牛客多校第五场 2023-7-31(G、D、H)
    未补完G.GotoPlayMaimaiDX算法:双指针做法:从左到右用两个指针维护一段区间且右指针不断右移,当这个区间满足题目所给的性质,我们取出区间长度,然后再将左指针右移,直到右指针到边界且左指针指到不符合题目的性质的位置结束,期间不断对符合题目性质的区间长度取最小值。code......
  • 23暑假友谊赛 No.3
    A-把你砍成两半!在本地找规律就会发现,当\(a_1\)确定时,\(a_i\)一定是\(a_1\)的倍数。所以答案就是\[\sumC_{\frac{n}{a_1}-1}^{k-1}\]#include<bits/stdc++.h>usingnamespacestd;#defineintlonglongconstintmod=998244353;vector<int>fact,invFact;int......
  • 「赛后总结」暑假 CSP 模拟赛系列
    「赛后总结」暑假CSP模拟赛系列点击查看目录目录「赛后总结」暑假CSP模拟赛系列20230728(fengwuround)T3CountMultisetT4Juliathesnail20230730(ZZ作者round)T3数组T4树20230731(Max_QAQround)T3UT4E20230801(letitdownround)T2神(eldenring)T4动(genshin)20230802(Max_......
  • 牛客暑假多校 2023 第五场
    目录写在前面GDHCEI写在最后写在前面战犯在此。我宣布二周年这首是神。以下按个人向难度排序。G尺取法,右端点单调右移过程中右移调整左端点,使区间内每种数都至少出现1次,4出现至少\(k\)次即可。///*By:Luckyblock*/#include<cmath>#include<cstdio>#include<......
  • 暑假集训D8 2023.8.1 补题
    C.P3029[USACO11NOV]CowLineupS有\(n\)只牛,他们各自有自己的编号(不同牛的编号可能是相同的).这些牛站在不同的位置.现在需要给这些牛拍一张照.有如下要求选定一个范围内的牛拍照,这些牛需要包含所有出现过的编号照片的成本是这个范围,因此范围越小越好已经给定所有......
  • 暑假第五周
    目录re5-packed-movement法一法二flagreverse-for-the-holy-grail-350expflagre5-packed-movement先脱壳ida打开全是mov指令,movfuscator混淆法一shift+F12搜索字符串找到'WrongFlag!',交叉引用可以看到有70多处引用,可能就是逐字符比较随便点一个看看,从每一个'WrongF......
  • 【暑假例题】20230727 矩阵基本运算(C++)
    题目请使用C++实现矩阵的各种运算矩阵创建矩阵相加矩阵相减矩阵相乘数字乘矩阵矩阵上叠加矩阵左右叠加矩阵转置矩阵旋转矩阵求逆矩阵输出题目分析矩阵创建这里只需注意由于我们需要通过不同的函数对数组进行操作,所以我们需要将数组存储在容器或者使用指针防止数......
  • 暑假生活第三周
    这周我致力于深入学习SQLServer,并掌握一些更具挑战性的知识。作为一个学生,我充分利用家里的学习环境,花费了大量时间和精力来探索SQLServer的高级概念和技术。首先,我将重点放在了存储过程和触发器上。我对存储过程的概念进行了深入研究,并学会了如何编写、调用和管理它们。我了解......
  • 暑假周记(7.30)
    Date类Date:精确到毫秒,代表特定的瞬间SimpleDateFormat:格式和解析日期的类案例演示Dated1=newDate();//获取当前系统时间System.out.println("当前日期="+d1);Dated2=newDate(9234567);//通过指定毫秒数得到时间System.out.println("d2="+d2);//获取某个时间对......