首页 > 其他分享 >河南萌新联赛2024第(三)场:河南大学

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

时间:2024-08-01 19:39:40浏览次数:12  
标签:河南大学 int ip cin long name 2024 萌新 define

Circle
画出4个圈的交叉
所以就是1 2 4 8 14,从第二个数开始,每个+2,+4,+6,....以此类推。

void solve()
{
    int a[1000005]={0}; 
    a[0]=1;
    a[1]=2;
    for(int i=2;i<1000005;i++)
    {
        a[i]=a[i-1]+2*(i-1);
    }
    
    int n; cin>>n;
    while(n--)
    {
        int x; cin>>x;
        cout<<a[x]<<" ";
    }
}

keillempkill学姐の卷积
简单的模拟,但是注意细节的处理就行。

#include <bits/stdc++.h>
#define int long long
#define endl '\n'
using namespace std;
typedef pair<int,int> pii;
#define x first
#define y second
#define all(v) v.begin(),v.end()
#define allr(v) v.rbegin(),v.rend()
int dx[]={0,1,-1,0};
int dy[]={-1,0,0,1};

int a[25][25];
int b[25][25];
int ans[30][30];
 int n,m;
int cal(int row,int line)
{
    int temp=0;
    for(int i=row,x=1;i<row+n,x<=n;i++,x++){
        for(int j=line,y=1;j<line+n,y<=n;j++,y++)
        {
            temp+=a[x][y]*b[i][j];//注意这里a是放x,y而不是i,j
        }
    }
    return temp;
}

void solve()
{
    cin>>n>>m;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++) cin>>a[i][j];
    
    for(int i=1;i<=m;i++)
        for(int j=1;j<=m;j++) cin>>b[i][j];
    
    //外面两层循环是遍历每一个点
   for(int k=1;k<=m-n+1;k++){
       for(int g=1;g<=m-n+1;g++){
    ans[k][g]=cal(k,g);
   }
   }
   
   for(int i=1;i<=m-n+1;i++){
    for(int j=1;j<=m-n+1;j++) cout<<ans[i][j]<<" ";
    cout<<endl;
   }
   
}




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

SSH
多使用map来处理对应关系,边写边理清思路,有详细注释

#include <bits/stdc++.h>
#define int long long
#define endl '\n'
using namespace std;
typedef pair<int,int> pii;
#define x first
#define y second
#define all(v) v.begin(),v.end()
#define allr(v) v.rbegin(),v.rend()
int dx[]={0,1,-1,0};
int dy[]={-1,0,0,1};



void solve()
{
    int n,m,q; cin>>m>>n>>q;//n台主机,m个密钥对,q次查询
    map<string,string>key;//存公钥和私钥,左边si钥,右边公钥
    for(int i=0;i<m;i++)
    {
        string pub,pri;
        cin>>pub>>pri;
        key[pri]=pub;
    }
    
    map<string,set<string> >user;//存用户和对应的密钥
    map<string,set<string> >ipv4;//对应的ipv4的地址存的用户
    for(int i=0;i<n;i++)
    {
        string ip; cin>>ip;//ip
        int num;cin>>num;//有几个用户;
        while(num--)
        {
            string name; cin>>name;//用户名
            ipv4[ip].insert(name);//保存ip地址下的对应用户
            
            int cnt ;cin>>cnt;//公钥数量
            while(cnt--) {
                string keyname;//公钥名称
                cin>>keyname;
                user[name].insert(keyname);//保存用户对应的公钥
            }
        }
    }
    
    //for(auto t:user["gg"]) cout<<t<<" ";
    
    
    while(q--)
    {
        int f1=0,f2=0;
        string name ;cin>>name;
        string ip; cin>>ip;
        string keyname;cin>>keyname;//私钥
        if(ipv4[ip].find(name)!=ipv4[ip].end() ) f1=1;//用户名在对应ip的主机上
        //用户拥有该私钥对应的密钥
        string ans=key[keyname];
        if(user[name].find(ans)!=user[name].end()) f2=1;
        
        
        if(f1&&f2) cout<<"Yes";
        else cout<<"No";
        cout<<endl;
    }
    
    
}




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

求值
这题可以有二分的解法,也可以有三分的解法,但是三分的细节处理挺多的,我不是很会。使用二分的解法思路这么走:

1.\(∣x∗A+y∗B+z∗C−W∣\)与\(x+y+z=n\),我们可以发现\(z=n-x-y\),那么当你把z代入的时候就会有\((a-c)*x+(b-c)*y+n*c-w\),可以发现当我们枚举x,去二分y的时候,只要保证了\(b>c\),那么这个等式就可以满足单调性,所以在枚举x之前,处理b和c。

2.注意这里有一个绝对值,那么我们可以把找\(∣x∗A+y∗B+z∗C−W∣\),看成找\(x∗A+y∗B+z∗C−W>=0\)的最小值和找\(x∗A+y∗B+z∗C−W<=0\)的最大值(负数最大时,绝对值最小),都找完以后呢,再去取最小值。

#include <bits/stdc++.h>
#define int long long
#define endl '\n'
using namespace std;
typedef pair<int,int> pii;
#define x first
#define y second
#define all(v) v.begin(),v.end()
int dx[]={0,1,-1,0};
int dy[]={-1,0,0,1};

int a,b,c,n,w;

int cacl(int x,int y)//计算结果
{
    
    return   (a-c)*x+(b-c)*y+n*c-w;
}


void solve()
{
  
   cin>>a>>b>>c>>n>>w;
    if(b<c) swap(b,c);//保证b>c
    int ans=1e19;
    for(int i=0;i<=n;i++)//枚举x,去二分y
    {
        //找等式大于0时的最小值
        int l=0,r=n-i;
        int res=-1;
        while(l<=r) 
        {
            int mid=(l+r)>>1;//mid 相当于y,i相当于x
            if(cacl(i,mid)>=0) res=cacl(i,mid),r=mid-1;
            else l=mid+1;
        }
        
        int one=-1;
        //找等式小于0时的最大值
        l=0,r=n-i;
        while(l<=r)
        {
            int mid=(l+r)>>1;
            if(cacl(i,mid)<=0){
                one=-cacl(i,mid);//要的是绝对值
                l=mid+1;
            }
            else r=mid-1;
        }
        
        if(res!=-1) ans=min(ans,res);
        if(one!=-1) ans=min(ans,one);
        
    }
    cout<<ans<<endl;
    
    
}


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

    int t=1;
    cin>>t;
    while(t--) solve();
    return 0;
}

累加器
这一题使用ymz的超级思路:对于每一个数从0到该数的二进制位的变化数为这个数除以每个二进制位的大小,举个例子:5,从0->5,二进制位对应为0101,那么使用到的二进制位的大小为4 2 1,所以变化次数为5/1+5/2+5/4=8次,样例1:1 4,1的变化次数为1,那么答案就是8-1=7。
总结:答案就是y+x的变化次数-y的变化次数

#include <bits/stdc++.h>
#define int long long
#define endl '\n'
using namespace std;
typedef pair<int,int> pii;
#define x first
#define y second
#define all(v) v.begin(),v.end()
int dx[]={0,1,-1,0};
int dy[]={-1,0,0,1};

int a[35];
void ycj()
{
     a[0]=1;
    for(int i=1;i<=32;i++) a[i]=a[i-1]*2;
}


void solve()
{
    int xx,yy;cin>>xx>>yy;
    yy+=xx;
    int ans=0; 
    for(int i=0;i<=30;i++)
    {
        ans+=yy/a[i]-xx/a[i];
        
    }
    cout<<ans<<endl;
    
}


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

标签:河南大学,int,ip,cin,long,name,2024,萌新,define
From: https://www.cnblogs.com/swjswjswj/p/18336569

相关文章

  • 2024牛客暑期多校训练营6
    Preface警钟长鸣,经典一个变量拿来跑两次循环然后挂了看不出来,主要这种睿智错误只有像我这种把循环变量声明在开头的人才会犯当时看了半天没看出来红温了,还把队友都摇过来看,然后三个人全红温了直到最后瞎JBassert了半天才发现这个问题,然后罚时爆炸,会的题也没时间写了,直接掉大......
  • 奇怪数学题 (更新至 20240801)
    1\[\color{#40865d}(2)\]\(f(x)=x^{2}-a(x+a\lnx)(a\neq0)\),若\(f(1)+f'(1)=0\)且\(a\gt0\),问可以得到什么最值相关的不等式结论\[\texttt{Sol.}\]\[f(x)=x^{2}-ax-a^{2}\lnx\]\[f'(x)=2x-a-\frac{a^{2}}{x}\]\[2-a-a^{2}+1-a=0\]解得\(a_{1}=1,......
  • 杭电多校 2024 游记
    前言和ppip还有b6e0_组的队,team102。2024-07-19Round1自己过了2,8,12,5。2024-07-22Round2自己过了8,3,2。2024-07-26Round3自己过了8,11,12,5。2024-07-29Round4自己过了5,4,7。......
  • 2024.8.1 作业
    使用两个线程完成两个文件的拷贝,分支线程1拷贝前一半,分支线程2拷贝后一半,主线程回收两个分支线程的资源代码:/*******************************************/文件名:threadwork.c/*******************************************/#include<myhead.h>//创建传输信息的结构体......
  • ubuntu2024 安装 postgresql最新版
    1、执行以下命令来创建文件存储库配置:sudosh-c'echo"debhttp://apt.postgresql.org/pub/repos/apt$(lsb_release-cs)-pgdgmain">/etc/apt/sources.list.d/pgdg.list' 2、导入存储库签名密钥:wget--quiet-O-https://www.postgresql.org/media/keys/ACCC4CF8.as......
  • C高级(学习)2024.8.1
    目录shell命令数组数组的赋值数组的调用遍历数组函数函数的定义方式函数调用分文件编程源文件头文件include引用时“”和<>的区别编译工具gcc编译工具gdb调试make工具定义Makefile格式Makefile管理多个文件Makefile变量自定义变量预定义变量自动变量Ma......
  • 【笔记】杂题选讲 2024.8.1 下午
    [AGC018F]TwoTrees[AGC018F]TwoTrees-洛谷|计算机科学教育新生态(luogu.com.cn)先判一下奇偶性。考虑做一个很强的钦定,奇数都填\(\pm1\),偶数都填\(0\)。对于同一棵树的一棵子树,考虑对子树内两个奇数点做匹配,要求匹配上的点一个\(+1\)一个\(-1\),这样就能在子树的根......
  • 组合数学学习笔记(二)(2024.7.4)
    一、鸽巢原理1.鸽巢原理将\((\sum\limits_{i=1}^n{p_i})-n+1\)放入\(n\)个盒子,一定存在一个盒子\(i\),使得第\(i\)个盒子至少装了\(p_i\)个物品。练习一有十个数\(a_1,a_2\dotsa_{10}\)满足\(\forall_{1\leqi\leq10}{1\leqa_i\leq60}\),证明能够从\(a_i\)中挑......
  • 多项式学习笔记(一)(2024.7.6)
    声明:在本节范围内,所有同余号(多项式运算)均在\((\text{mod}x^n)\)意义下进行;所有等号(代数运算)均在模某个质数\(p\)意义下进行。暴力多项式计算加法\(H(x)=F(x)+G(x)\),求\(H(x)\)解:类比高精度加法\(h_i=f_i+g_i\),复杂度\(O(n)\)#include<bits/stdc++.h>usingnames......
  • 蓝桥杯2024年第十五届省赛A组-训练士兵
    题目描述在蓝桥王国中,有n名士兵,这些士兵需要接受一系列特殊的训练,以提升他们的战斗技能。对于第i名士兵来说,进行一次训练所需的成本为pi枚金币,而要想成为顶尖战士,他至少需要进行ci次训练。为了确保训练的高效性,王国推出了一种组团训练的方案。该方案包含每位士兵所需......