河南萌新联赛2024第(三)场:河南大学

   这场打的巨烂,前三道题写的都挺快的,但是第四题看到大家都写出了L题,所以就开始去写L题了,但是由于map开错了,后来反复给也没有改对,心情就有些急躁,想着换一个写法去写,但是新的写法有很大的漏洞,所以不断超时或者报错。写F题的时候,脑子没转过来,将一个简单的规律绕了特别大的一个圈子写出来的(八个if条件进行判断)反复出错,后来就给自己的心态写崩了,后边的题看都没看。

   比完赛静下心来想一想,实际上题目并没有那么的难,而是自己不敢尝试和心理素质不够强,导致四个小时的比赛只有前一个小时交了三道题,后三个小时一道题都没出。

F题--累加器

https://ac.nowcoder.com/acm/contest/87865/F

实际上可以将其处理的很巧妙。x到x/2上产生了x/2的改变,依照这个规律可以直接找出x到0上到底有多少位发成改变, x对y次累加的改变就可以变为temp(x+y)-temp(x)。

#include<bits/stdc++.h>
using namespace std;
#define int long long
const int mod=998244353;
int t;
int a,b;
int temp(int x,int y){
    int n=x;
    int m=y;
    while(x){
        x/=2;
        n+=x;
    }
    while(y){
        y/=2;
        m+=y;
    }
    return m-n;
}
signed main(){
    std::ios::sync_with_stdio(0);
    std::cin.tie(0);
    cin>>t;
    while(t--){
        cin>>a>>b;
        cout<<temp(a,a+b)<<endl;
        
    }
}
    

L题--SSH

https://ac.nowcoder.com/acm/contest/87865/L

实际上,这道题并没有很难,但是当时心态写崩了,不够镇静,所以没能理清思路,好好的写一遍。实际上只要将存储数据的那部分写清楚,就好了。

     开三个map,第一个map存储钥匙,第二个map用来存储每个地址上存在的用户的名字,第三个map,是用来存储每个名字所需要的公共钥匙。在查找的时候,要先通过地址来查找人,再找到人之后,在去查找这个人的私人钥匙所对应的公共钥匙能不能被查找到。

#include<bits/stdc++.h>
using namespace std;
#define int long long
const int mod=998244353;
int m,n,q;
map<string,string>mp1;
string pub,pri;
signed main(){
    std::ios::sync_with_stdio(0);
    std::cin.tie(0);
    cin>>m>>n>>q;
    for(int i=1;i<=m;i++){
        cin>>pub>>pri;
        mp1[pub]=pri;
    }
    map<string,vector<string> >mp2;
    map<string,vector<string> >mp3;
    for(int i=1;i<=n;i++){
        string s;
        int a;
        cin>>s>>a;
        for(int j=1;j<=a;j++){
            string str;
            int b;
            cin>>str>>b;
            mp2[s].push_back(str);
            for(int k=1;k<=b;k++){
                string yao;
                cin>>yao;
                mp3[str].push_back(yao);
            }
        }
    }
    for(int i=1;i<=q;i++){
        int cnt=0;
        string name,add,fin;
        cin>>name>>add>>fin;
        for(auto x:mp2[add]){
            if(x==name){
                for(auto y:mp3[name]){
                    if(mp1[y]==fin){
                        //cout<<"Yes"<<endl;
                        cnt=1;
                        break;
                    }
                }
            }
        }
        if(cnt==1) cout<<"Yes"<<endl;
        else cout<<"No"<<endl;
    }
}
    

  • 7
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值