首页 > 其他分享 >winter week3 day1

winter week3 day1

时间:2024-02-17 21:34:42浏览次数:26  
标签:typedef const winter int double long day1 week3 define

2024牛客寒假算法基础集训营2

ATokitsukaze and Bracelet

#include<bits/stdc++.h>
using namespace std;
#define int long long
//#define int __int128
#define double long double
typedef pair<int,int>PII;
typedef pair<string,int>PSI;
typedef pair<string,string>PSS;
const int N=100+5,INF=0x3f3f3f3f,Mod=1e9+7,mod=998244353;
const int MAXN=1e8+5;
const double eps=1e-12;
const int dx[4]={-1,1,0,0};
const int dy[4]={0,0,-1,1};



void solve() {
    int a,b,c;
    cin>>a>>b>>c;
    int ans=0;
    if(a==150)ans++;
    else if(a==200)ans+=2;
    if(b>=34&&b<=40)ans+=1;
    else if(b==45)ans+=2;
    if(c>=34&&c<=40)ans+=1;
    else if(c==45)ans+=2;
    cout<<ans<<'\n';
}

signed main(){
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    int t=1;
    cin>>t;
    while(t--){
        solve();
    }
    return 0;
}
View Code

 

Tokitsukaze and Cats

思路:枚举,看猫的4个方向有多少没有围栏

#include<bits/stdc++.h>
using namespace std;
#define int long long
//#define int __int128
#define double long double
typedef pair<int,int>PII;
typedef pair<string,int>PSI;
typedef pair<string,string>PSS;
const int N=100+5,INF=0x3f3f3f3f,Mod=1e9+7,mod=998244353;
const int MAXN=1e8+5;
const double eps=1e-12;
const int dx[4]={-1,1,0,0};
const int dy[4]={0,0,-1,1};



void solve() {
    int n,m,k;
    cin>>n>>m>>k;
    vector<vector<int>>ve(n+2,vector<int>(m+2));
//    vector<PII>g(k);
    int ans=0;
    for(int i=0;i<k;++i){
        int u,v;
        cin>>u>>v;
        ve[u][v]=1;
        int c=0;
        for(int j=0;j<4;++j){
            int x=u+dx[j],y=v+dy[j];
            if(ve[x][y]==0)c++;
        }
        ans+=c;
    }
    cout<<ans;
}

signed main(){
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    int t=1;
//    cin>>t;
    while(t--){
        solve();
    }
    return 0;
}
View Code

 

CTokitsukaze and Min-Max XOR

思路:

 DTokitsukaze and Slash Draw

思路:由于nm范围不大,可以操作每个位置使用每种卡片,跑最短路即可,就是求从0到n-k(位置从上到下为0、n-1、...2、1)

#include<bits/stdc++.h>
using namespace std;
#define int long long
//#define int __int128
#define double long double
typedef pair<int,int>PII;
typedef pair<string,int>PSI;
typedef pair<string,string>PSS;
const int N=1e5+5,INF=0x3f3f3f3f,Mod=1e9+7,mod=998244353;
const int MAXN=1e8+5;
const double eps=1e-12;
const int dx[4]={-1,1,0,0};
const int dy[4]={0,0,-1,1};


void solve() {
    int n,m,k;
    cin>>n>>m>>k;
    vector<vector<PII>>g(n);
    vector<PII>ve(m);
    vector<int>dis(n,1e17),vis(n);
    for(int i=0;i<m;++i)cin>>ve[i].first>>ve[i].second;
    for(int i=0;i<n;++i){
        for(int j=0;j<m;++j){
            int a=ve[j].first,b=ve[j].second;
            int to=(i+a)%n;
            g[i].push_back({to,b});
        }
    }
    dis[0]=0;
    priority_queue<PII,vector<PII>,greater<PII>>q;
    q.push({dis[0],0});
    while(q.size()){
        auto t=q.top();
        q.pop();
        int u=t.second,dist=t.first;
        if(vis[u])continue;
        vis[u]=1;
        for(auto [v,w]:g[u]){
            if(w+dist<dis[v]){
                dis[v]=w+dist;
                q.push({dis[v],v});
            }
        }
    }
    if(dis[n-k]==1e17)cout<<"-1\n";
    else cout<<dis[n-k]<<'\n';
}
signed main(){
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    int t=1;
    cin>>t;
//    init();
    while(t--){
        solve();
    }
    return 0;
}
View Code

 

ETokitsukaze and Eliminate (easy)

思路:同hard

#include<bits/stdc++.h>
using namespace std;
#define int long long
//#define int __int128
#define double long double
typedef pair<int,int>PII;
typedef pair<string,int>PSI;
typedef pair<string,string>PSS;
const int N=100+5,INF=0x3f3f3f3f,Mod=1e9+7,mod=998244353;
const int MAXN=1e8+5;
const double eps=1e-12;
const int dx[4]={-1,1,0,0};
const int dy[4]={0,0,-1,1};



void solve() {
    int n;
    cin>>n;
    vector<int>ve(n);
    for(int i=0;i<n;++i){
        cin>>ve[i];
    }
    int ans=0;
    for(int i=n-1;i>=0;--i){
        int c=0,r=ve[i];
        while(i>=0&&ve[i]==r)i--,c++;
        if(i==-1)ans+=c;
        else ans++;

    }
    cout<<ans<<'\n';
}

signed main(){
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    int t=1;
    cin>>t;
    while(t--){
        solve();
    }
    return 0;
}
View Code

 

FTokitsukaze and Eliminate (hard)

思路:从后往前枚举,找到要操作的颜色。其实就是统计每个颜色的最后一个的位置的最小值即为操作的颜色,再更新每个颜色的最后一个的位置

#include<bits/stdc++.h>
using namespace std;
#define int long long
//#define int __int128
#define double long double
typedef pair<int,int>PII;
typedef pair<string,int>PSI;
typedef pair<string,string>PSS;
const int N=100+5,INF=0x3f3f3f3f,Mod=1e9+7,mod=998244353;
const int MAXN=1e8+5;
const double eps=1e-12;
const int dx[4]={-1,1,0,0};
const int dy[4]={0,0,-1,1};



void solve() {
    int n;
    cin>>n;
    vector<int>ve(n+1),l(n+1),st(n+1);
    for(int i=1;i<=n;++i){
        cin>>ve[i];
        l[i]=st[ve[i]];
        st[ve[i]]=i;
    }
    vector<int>now;
    st=vector<int>(n+1,0);
    int mi=n;
    for(int i=n;i>=1;--i){
        if(!st[ve[i]])now.push_back(i),mi=i;
        st[ve[i]]=1;
    }
    int ans=0;
    while(mi>0){
        ans++;
        if(mi==1)break;
        int s=n;
        vector<int>p;
        for(auto &v:now){
            if(v==0)continue;
            while(v>=mi&&v!=0)v=l[v];
            if(v!=0){
                s=min(s,v);
                p.push_back(v);
            }
        }
        mi=s;
        now=p;
    }
    cout<<ans<<'\n';
}

signed main(){
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    int t=1;
    cin>>t;
    while(t--){
        solve();
    }
    return 0;
}
View Code

 

GTokitsukaze and Power Battle (easy)

 ITokitsukaze and Short Path (plus)

思路:由权值计算式子可以看出路径长度越长权值越大,那么dist(i,j)最小即为i到j

#include<bits/stdc++.h>
using namespace std;
#define int long long
//#define int __int128
#define double long double
typedef pair<int,int>PII;
typedef pair<string,int>PSI;
typedef pair<string,string>PSS;
const int N=100+5,INF=0x3f3f3f3f,Mod=1e9+7,mod=998244353;
const int MAXN=1e8+5;
const double eps=1e-12;
const int dx[4]={-1,1,0,0};
const int dy[4]={0,0,-1,1};



void solve() {
    int n,ans=0;
    cin>>n;
    vector<int>ve(n+1),pre(n+1);
    for(int i=1;i<=n;++i){
        cin>>ve[i];
        ans+=ve[i]*(2*n-2);
    }
    sort(ve.begin()+1,ve.end());
    for(int i=1;i<=n;++i)pre[i]=pre[i-1]+ve[i];
    for(int i=1;i<=n;++i){
        ans+=pre[n]-pre[i]-(n-i)*ve[i]+(i-1)*ve[i]-pre[i-1];
    }
    cout<<ans<<'\n';
}

signed main(){
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    int t=1;
    cin>>t;
    while(t--){
        solve();
    }
    return 0;
}
View Code

 

JTokitsukaze and Short Path (minus)

思路:由权值计算式子可以看出wij为2*min(ai,aj),那么dist(i,j)有两种情况,一种为2*min(ai,aj),另一种为找到权值最小的点q,dist(i,j)= dist(i,q)+ dist(q,j)=4*aq,取较小值即可

#include<bits/stdc++.h>
using namespace std;
#define int long long
//#define int __int128
#define double long double
typedef pair<int,int>PII;
typedef pair<string,int>PSI;
typedef pair<string,string>PSS;
const int N=100+5,INF=0x3f3f3f3f,Mod=1e9+7,mod=998244353;
const int MAXN=1e8+5;
const double eps=1e-12;
const int dx[4]={-1,1,0,0};
const int dy[4]={0,0,-1,1};



void solve() {
    int n;
    cin>>n;
    vector<int>ve(n);
    for(int i=0;i<n;++i){
        cin>>ve[i];
    }
    sort(ve.begin(),ve.end());
    int mi=ve[0];
    int ans=(n-1)*2*mi,p=4*mi;
    for(int i=1;i<n;++i){
        if(2*ve[i]<p)ans+=2*ve[i]*(n-i-1);
        else ans+=p*(n-i-1);
    }
    cout<<ans*2<<'\n';
}

signed main(){
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    int t=1;
    cin>>t;
    while(t--){
        solve();
    }
    return 0;
}
View Code

 

KTokitsukaze and Password (easy)

思路:n不大,暴力枚举

#include<bits/stdc++.h>
using namespace std;
#define int long long
//#define int __int128
#define double long double
typedef pair<int,int>PII;
typedef pair<string,int>PSI;
typedef pair<string,string>PSS;
const int N=1e5+5,INF=0x3f3f3f3f,Mod=1e9+7,mod=998244353;
const int MAXN=1e8+5;
const double eps=1e-12;
const int dx[4]={-1,1,0,0};
const int dy[4]={0,0,-1,1};


void solve() {
    int n,y;
    set<int>ans;
    string s;
    cin>>n>>s>>y;

    char a,b,c,d,e;
    for(a='0';a<='9';++a){
        for(b='0';b<='9';++b){
            for(c='0';c<='9';++c){
                for(d='0';d<='9';++d){
                    for(e='0';e<='9';++e){
                        if(a==b||b==c||c==d||a==d||a==c||b==d)continue;
                        string t=s;
                        for(int i=0;i<t.size();++i){
                            if(t[i]=='a')t[i]=a;
                            else if(t[i]=='b')t[i]=b;
                            else if(t[i]=='c')t[i]=c;
                            else if(t[i]=='d')t[i]=d;
                            else if(t[i]=='_')t[i]=e;
                        }
                        if(n>1&&t[0]=='0')continue;
                        int x=stoi(t);
                        if(x%8==0&&x<=y)ans.insert(x);
                    }
                }
            }
        }
    }
    cout<<ans.size()<<'\n';
}
signed main(){
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    int t=1;
    cin>>t;
//    init();
    while(t--){
        solve();
    }
    return 0;
}
View Code

 

标签:typedef,const,winter,int,double,long,day1,week3,define
From: https://www.cnblogs.com/bible-/p/18018423

相关文章

  • Day1
    未获得准确的时间。导致了迟到/(ㄒoㄒ)/~~结果错过了前面的小半节课,也是让人难受≧﹏≦。进入正题T1最优贸易简化版解题方法:分块倍增线段树并查集本次使用分块解决,其他方法见题目中的附件。$n$个城市分布在一条直线上,从$L$到$R$获得最大利润时$ans=max(a_......
  • P7167 [eJOI2020 Day1] Fountain-st表
    这个题目,可以看出每一个盘里的水往下流出的路径会是一样的,而且没有修改操作,所以我们可以预处理出每个盘里往下的路径,已经要下去所需要的水。那么首先需要寻找每个盘往下的第一个盘是那个。对于盘i来说,第一个盘j应满足$j>i&&D_j>D_i$,所以就可以想到用单调栈处理每个盘下第一......
  • 补题 DAY1
    P2146 [NOI2015]软件包管理器给你一棵树,两个操作:installx查询路径\(0\tox\)上的点权和,并将路径点权赋值为\(1\)unistallx查询\(x\)的子树点权和,并将子树点权赋值为\(0\)板子。恶心。点击查看代码#include<bits/stdc++.h>#defineintlonglongusingnam......
  • Java学习日记 Day16 正月初五,学习回归正轨!
    年前把SSM和Linux学完了,过年期间简单的做了个ssm的项目,再理解理解SSM。今天继续学了radis,也是比较重要的一个技术。radis:简单来说就是把数据存到缓存里的技术,常常和关系数据库结合使用,我们可以把数据库拿出来的数据存到缓存里,这样减少了io的次数,大大提高了效率。radis的学习大......
  • day17_进程管理
    linux资源管理篇昨日内容回顾1.先看状态,再去启动systemctlstatusfirewalldsystemctlrestartfirewalldsystemctllist-unit-files|grepfirewalld1.先理解服务的意思,服务,就是你安装的软件名字2.服务就是一个软件程序,会提供可用的命令,去操控这个软件3.firewall......
  • day19_软件包管理
    Linux软件包管理什么是软件,代码软件包顾名思义就是将应用程序、配置文件和数据打包的产物=======nginx_v.10.rpmyuminstallnginx-y=============先下载nginx.rpm软件包,然后yum自动帮你去安装了这个包/usr/bin/nginx/etc/nginx/nginc.conf配置文件,写了用于控制......
  • day18_系统资源管理
    今日内容英文单词的认识,需要大家自己逐步锻炼了,以后适当的加在考试题中作为练习关于作业,昨日知识,以后大家就把不会的作业题,发在各自小组,我来课下解决关于后台符&,如何用,才是真的实现,安全,可靠的后台运行。可以理解为,无论是用户正常注销登录如logout,如exit。-还是异常的......
  • 【贪心】P7403 [BalticOI 2002 Day1] Tennis Club
    目前题解区还没有证明,我交个证明。形式化题意给定每个点的度数\(d_i\),请构造一个简单无向图(无重边无自环)。First.无解首先,根据握手定理,每个无向图的度数之和为边数的两倍,所以如果度数之和为奇数,那么肯定无解。但是发现,这种情况之外还有别的无解情况(本题有\(3\)个无解数......
  • day16_防火墙服务
    基础服务管理防火墙是什么查找防火墙服务名的技巧[root@yuchao-linux01~]#systemctllist-units|grepfirefirewalld.serviceloadedactiverunningfirewalld-d......
  • day15_scp与ntp服务
    今日笔记,服务管理回顾systemctl你的机器,会有默认的软件(服务),network管理网络的软件,sshd提供远程连接的软件对这些服务,进行管理启动停止重启重新加载开机自启(持久化)禁止开机自启查询是否持久化(是否开机自启)centos7,用这个命令,同时对服务进行启停管理,以及开机自启......