首页 > 其他分享 >2023牛客寒假集训1

2023牛客寒假集训1

时间:2023-01-16 23:47:36浏览次数:60  
标签:10 int tt nowcoder cin 牛客 寒假 2023 out

A题 World Final? World Cup! (I)(条件判断)

链接:https://ac.nowcoder.com/acm/contest/46800/A

in

3
1111111111
1111111110
0101011010

out

-1
10
6

说明

对于第二组样例,踢完前9球时双方比分5:4,此时最后一球若不进则比分是5:4且A赢、若进则比分是5:5进入加踢,因此9球时不能判断最终结果,踢完10球才确定B输。

对于第三组样例,踢完六球时比分为0:3,此时可以确定B一定会赢。

题意是给出一个长度为10的字符串,奇数位是A的获胜情况,偶数位是B的获胜情况

如果到哪一局可以确定有一支球队必胜,那么输出当前局数

我们可以分成奇数局和偶数局来判断

第 \(t\) 局 ( \(t\) 是 奇数 )

如果\(A\)赢了这一局且胜负已分 那么可知\(A\)已经赢了的局数>\(B\)已经赢了的局数 + \(B\)还未开始的局数

如果\(A\)输了这一局且胜负已分 那么可知\(B\)已经赢了的局数>\(A\)已经赢了的局数+ \(A\)还未开始的局数

if(s[o]=='1'){
				t1++;
				if(t1>t2+(n-o)/2+1){
					cout<<o<<endl;
					return;
				}
			}
			else{
				if(t2>t1+(n-o)/2){
					cout<<o<<endl;
					return;
				}
			}

第 \(t\) 局 ( \(t\) 是 偶数 同上可以推出)

key code

void solve(){
	//try it again.
	string s;
	cin>>s;
	int n=10;
	s="?"+s;
	int cnt1=0,cnt2=0;
	int t1=0,t2=0;
	up(1,10){
		if(o&1){
			if(s[o]=='1'){
				t1++;
				if(t1>t2+(n-o)/2+1){
					cout<<o<<endl;
					return;
				}
			}
			else{
				if(t2>t1+(n-o)/2){
					cout<<o<<endl;
					return;
				}
			}
		}
		else{
			if(s[o]=='1'){
				t2++;
				if(t2>t1+(n-o)/2){
					cout<<o<<endl;
					return;
				}
			}
			else{
				if(t1>t2+(n-o)/2){
					cout<<o<<endl;
					return;
				}
			}
		}
	}
	cout<<-1<<endl;
	return;
}

C题现在是,学术时间 (I)(贪心)

链接:https://ac.nowcoder.com/acm/contest/46800/C

in

2
3
6 5 4
2
10 0

out

3
1

说明

对于样例一,一种可能的方案是把三篇论文(引用量分别为6,5,4)都让第一个教授发表,这样第一个教授有三篇引用量大于等于三而没有四篇引用量大于等于四,因此有h1=3,h2=0,h3=0,可以证明此时有\(\Sigma_{i=1}^nh_i\)最大,其值为3。

题目中说有\(n\) 篇论文,有\(n\)个教授

\(h_i\)的值是该教授发表的所有论文中,有至少\(H\)篇论文的引用量大于等于\(H\)这一命题成立的最大的\(H\)

有点抽象哈哈

不过我们构思一种思路,就是让一个教授发表一篇论文,这样除了引用量为0的论文都可以被记一次数

key code

int ans=0;
	cin>>n;
	int tt;
	up(1,n)cin>>tt,ans+=tt!=0;
	puts(ans);

D题现在是,学术时间 (II)(计算)

链接:D-现在是,学术时间 (II)_2023牛客寒假算法基础集训营1 (nowcoder.com)

in

3
3 4 1 2
3 4 5 5
3 4 1 5

out

0.333333333
0.480000000
0.571428571

说明

链接:https://ac.nowcoder.com/acm/contest/46800/D
来源:牛客网

为了评价程序的精确度,常常使用IOU这一标准来判断。定义两个矩形A,BA,BA,B的IOU为两个矩形交集部分的面积除以两个矩形并集部分的面积。例如,对于平面直角坐标系中\((0,0),(3,3)\)所确定的矩形与\((−1,1),(4,2)\)所确定的矩形,两矩形交集面积为3,并集面积为11,因此IOU为\(\frac{3}{11}\)。显然,IOU越大代表程序预测越精确。

现在,给出一个由平面上两点\((0,0),(x,y)\)所确定的GT目标框和一个点\(P(x_p,y_p)\)。请你求出在所有以P点作为其中一个顶点且边都平行于坐标轴的预测目标框中,可以使其与GT目标框取到的最大IOU为多少。

题目中说有给出一个\(x,y\)与原点构成一个矩形

再给出\(x_p,y_p\) 请你求出在所有以P点作为其中一个顶点且边都平行于坐标轴的预测目标框中与矩形的交集和并集的最大比

就是简单的计算面积

key code

void solve(){
	//try it again.
	int x,y,a,b;
	cin>>x>>y>>a>>b;
	if(a>=x&&b>=y){
		int S1=abs(x)*abs(y);
		int S2=abs(a)*abs(b);
		printf("%.9f\n",1.0*S1/S2);
	}
	else if(a<x&&b>=y){
		int tt=x-a;
		printf("%.9f\n",max(a*y*1.0/(a*b*1.0+(x-a)*y*1.0),tt*y*1.0/(tt*b*1.0+(x-tt)*y*1.0)));
	}
	else if(a>=x&&b<y){
		int tt=y-b;
		printf("%.9f\n",max(b*x*1.0/(a*b*1.0+(y-b)*x*1.0),tt*x*1.0/(tt*a*1.0+(y-tt)*x*1.0)));
	}
	else{
		int S1=x*y;
		int S2=max({a*b,a*(y-b),b*(x-a),(x-a)*(y-b)});
		printf("%.9f\n",1.0*S2/S1);
	}
}

E 鸡算几何 (计算几何)(先空下,回来补题解)

链接:E-鸡算几何_2023牛客寒假算法基础集训营1 (nowcoder.com)

in

4
0 1 0 0 1 0
1.000000000 0.000000000 0.000000000 0.000000000 0.000000000 1.000000000
1 0 0 0 0 2
2.000000000 0.000000000 0.000000000 0.000000000 0.000000000 1.000000000
45 67 0 0 26 -24
3.021000000 47.390000000 -41.979000000 -19.610000000 -74.030581210 -4.620132023
50 -58 0 0 65 88
75.106000000 -9.735000000 25.106000000 48.265000000 -71.510643929 -3.059693042

out

NO
YES
YES
YES

说明

具体来说,二维平面上有一根\(L\)型的铁丝,由AB和BC两条线段组成,鸡可以用以下三种操作玩铁丝:

1、在平面内任意地平移铁丝,即铁丝上每一个点横坐标都变化\(\Delta x\)、纵坐标都变化\(\Delta y\);

2、以B点为轴,任意地旋转铁丝,旋转是在平面上进行的(即旋转过程中铁丝不能离开地面);

3、鸡是三维生物!鸡将该铁丝拿起,在自己手里任意的调整铁丝的姿态后(鸡不能使铁丝发生形变)再随意放回平面上任意位置。

鸡可以任意(任意顺序、任意次数、不同的操作可以交替使用)使用上述三种操作来操作铁丝,经过一段时间的操作后,得到新铁丝的位置可以用线段DE和EF描述。注意DE并不保证与AB对应,EF同理,即DEF只描述操作后铁丝的形状。

现在,你想知道只根据ABC与DEF的信息,是否可以断言鸡一定使用过至少一次第三种操作。

key code

G 鸡格线 (线段树)

链接:G-鸡格线_2023牛客寒假算法基础集训营1 (nowcoder.com)

in

3 5
0 2 114514
2
1 1 2 2
2
1 1 3 1
2

out

114516
114551
3445

说明

你有一个长为\(n\)的数组\(a\),你需要支持以下两种操作:

1、输入\(l,r,k\),对区间\([l,r]\)中所有数字执行\(a_i =f(a_i)\)操作\(k\)次(式中等号表示赋值操作),之中\(f(x)=round(10\sqrt x)\),\(round\)为四舍五入函数。

2、输出当前数组所有数字的和。

你需要正确处理\(m\)次这样的操作。

这个题当时看到的时候口嗨说可以用线段树做

但还是有些无从下手哈哈,所以赛后补的

key code

const int N=1<<18;
int n,m;
int maxl[N],minn[N];
int sum[N];
void pull(int p){//更新
    maxl[p]=max(maxl[p*2],maxl[p*2+1]);
    minn[p]=min(minn[p*2],minn[p*2+1]);
    sum[p]=sum[2*p]+sum[2*p+1];
}//修改携带值
void build(int p,int l,int r,auto &a){
    if(r-l==1){
        maxl[p]=minn[p]=sum[p]=a[l];
        if(a[l]==0)maxl[p]=minn[p]=100;
        return;
    }//最低层
    int m=l+r>>1;
    build(2*p,l,m,a);
    build(2*p+1,m,r,a);//分治
    pull(p);//更新
}
void modify(int p,int l,int r,int x,int y,int k){
    if(maxl[p]<=100&&minn[p]>=99)return;//为0跳过
    if(l>=y||r<=x)return;//不在区间内
    if(r-l==1){//单点更新
        while(k&&maxl[p]!=100&&maxl[p]!=99){
            maxl[p]=sqrtl(maxl[p])*10+.5;
            k--;
        }
        minn[p]=sum[p]=maxl[p];
        return;
    }
    int m=l+r>>1;
    modify(2*p,l,m,x,y,k);
    modify(2*p+1,m,r,x,y,k);
    pull(p);
}
void solve(){
    //try it again.
    cin>>n>>m;
    vector<int>a(n);
    cvec(a);
    build(1,0,n,a);
    while(m--){
        int o;cin>>o;
        if(o==1){
            int l,r,k;
            cin>>l>>r>>k;
            l--;
            modify(1,0,n,l,r,k);//1是第一个节点 0 n是从0到n-1  l  r是从l到r修改 k次
        }
        else{
            cout<<sum[1]<<endl;//总段
        }
    }
}

H-本题主要考察了DFS (观察)

链接:H-本题主要考察了DFS_2023牛客寒假算法基础集训营1 (nowcoder.com)

in

1
2
0001
0000
0210

out

11

说明

有1就加一

有2就减一

img

观察 没什么好说的

key code

void solve(){
	//try it again.
	cin>>n;
	m=n*n;
	int ans=10;
	fup(i,1,m-1){
		fup(j,1,4){
			char tt;
			cin>>tt;
			if(tt=='1')ans++;
			else if(tt=='2')ans--;
		}
	}
	puts(ans);
}

K-本题主要考察了dp(DP)

链接:K-本题主要考察了dp_2023牛客寒假算法基础集训营1 (nowcoder.com)

in

4 3

out

2

in

10 4

out

0

in

10 5

out

2

说明

你需要写出一个仅有000和111组成的长为nnn的字符串,要求之中恰有mmm个字符是111。

现在,规定对于原序列中一个长恰好为333的子区间(子区间是连续的),若之中111的个数多于000的个数,则这个区间是坏的。

请求出满足条件的字符串中,坏区间总数最少的字符串中有几个坏区间。

根据判断可知每两个\(1\)之间间隔两个\(0\)的时候这样不会产生坏区间

因此我们可以拿一个\(1\)再拿两个\(0\)这样安排区间

如果\(num_1<=num_0*2\)那么就不会有坏区间的产生

否则多出来的\(1\),每一个\(1\)会产生一个坏区间

还要注意一个边界,观察到长度为\(n\)的字符串只有\(n-2\)个长度为\(3\)的窗口

所以要特判一下

key code

void solve(){
	//try it again.
	cin>>n>>m;
	int t1=m;
	int t2=n-m;
	if(t1<=t2/2){
		cout<<0<<endl;
		return;
	}
	else{
		t1-=t2/2;
		t2%=2;
		cout<<min(n-2,t1-1)<<endl;
	}
	puts("");
}

L-本题主要考察了运气(瞎猜)

链接:L-本题主要考察了运气_2023牛客寒假算法基础集训营1 (nowcoder.com)

in

本题无输入

out

50

说明

如题面所述,本题很好心,是个选择题,共有100个选项(最多99发罚时就可以保证通过此题辣),选项编号为1至100,第i个选项为3.45+0.05*i,如第1个选项为3.50,第10个选项为3.95。

你需要选择出与答案最接近的选项的编号(一个1至100的正整数)。

瞎猜就是了,反正不会做hh (于是PHP爆WA50发)

key code

32

M-本题主要考察了找规律(背包)

链接:M-本题主要考察了找规律_2023牛客寒假算法基础集训营1 (nowcoder.com)

in

3 3

out

1.833333333

说明

若小波奇当前还剩下\(x(x>0)\)个仙贝,并给了一位朋友\(y\)个仙贝(\(x,y\)都为整数),则这位朋友对小波奇的好感度将增加\(y/x\)(这个值可以为小数)。

一道典型的背包可惜我个智障不会做哈哈

key code

void solve(){
    //try it again.
    cin>>n>>m;
    vector<db>dp(m+1);
     
    fup(i,1,n)
        fup(j,0,m)
            fup(k,1,j)
                dp[j-k]=max(dp[j-k],dp[j]+1.*k/j);
     
    printf("%.9f\n",dp[0]);
}

标签:10,int,tt,nowcoder,cin,牛客,寒假,2023,out
From: https://www.cnblogs.com/liangqianxing/p/17056712.html

相关文章

  • 力扣每日一题2023.1.16---1813. 句子相似性 III
    一个句子是由一些单词与它们之间的单个空格组成,且句子的开头和结尾没有多余空格。比方说,"HelloWorld" ,"HELLO" ,"helloworldhelloworld" 都是句子。每个单词都只 ......
  • HTML实现除夕最美烟花,2023春节倒计时,新年不可没有烟花,最炫烟花代码分享
    ......
  • 2023牛客寒假算法基础集训营1
    2023牛客寒假算法基础集训营1https://ac.nowcoder.com/acm/contest/46800过了7题,写一半没撑住去睡觉了。官方难度预期:果然我还是很菜哇qaqA-WorldFinal?WorldCu......
  • 2023年新年第一份博客
    2023年新年第一封博客,对今年的博客做一个大概的规划:技术类:Python计算机网络软件测试理论见闻类:需要去阅读一些经典的书籍:大话存储、人月神话等其他未完待......
  • 2023.1.15
    本周总结本周主要是还是了解图论相关的一些算法,补了一下组合计数专题。大主题图论,数论小专题二分图、欧拉路径,欧拉回路组合计数题目完成情况每个专题配了一到两道......
  • 2023牛客寒假算法基础集训营1 A题
    原题链接#include<bits/stdc++.h>usingnamespacestd;intmain(){intcnt1,cnt2,n,flag=0,a,b;cin>>n;stringstring1;while(n--){cnt1=c......
  • 53rd 2023/1/16 平衡树学习总结
    好久没打总结了,差不多有\(\frac16\)年,是一大失误,以后会继续坚持数据结构介绍首先,架构是一颗二叉搜索树即中序遍历为递增or递减序左子树小于根节点小于右子树请自......
  • 寒假总结
    已经完成各种基础漏洞的学习(包括XSS,SQL注入,XXE,RCE,逻辑漏洞等等)初步学会使用了AppScan,AWVS,Nessus,BP,MSF等完成了个人博客的搭建尝试(但是销毁了,来到51CT......
  • 2023.1.16[模板] 二次剩余
    2023.1.16二次剩余问题叙述给出N,p,求解方程$x^2\equivN$(\(modp\))且保证p是奇素数。算法流程解的数量首先,探究$x^2\equivN$这个方程解的数量,假设我们......
  • 2023年01月16日训练日志
    P7453我终于过力线段树维护矩阵区间和的大卡常师srds感觉这题不卡常造屎山的过程不尽顺利但是终究还是造出来了事实告诉我们,模板常打常新因为后面的那几个20pts都是......