2023牛客寒假集训3

A-不断减损的时间

A-不断减损的时间_2023牛客寒假算法基础集训营3 (nowcoder.com)

小红拿到了一个数组,她每次操作可以选择一个偶数除以2,可以操作任意次(也可以不操作)。求最终数组所有元素之和的最小值。

输入描述:

第一行输入一个正整数n
第二行输入n个整数ai​,代表小红拿到的数组。
1n105
109ai109

输出描述

一个整数,代表最终数组所有元素的最小和。

in

4
1 2 -3 4

out

0

根据题意就是将大于0的偶数都除成奇数再加起来

输出求和就行

key code

int n,m;
int f(int x){
	if(x&1||x<=0)return x;
	while(x%2==0)x/=2;
	return x;
}
void solve(){
	//try it again.
	int n;
	cin>>n;
	int sum=0;
	up(1,n){
		int x;
		cin>>x;
		sum+=f(x);
	}
	cout<<sum;
}

B-勉强拼凑的记忆

B-勉强拼凑的记忆_2023牛客寒假算法基础集训营3 (nowcoder.com)

小红希望用恰好n块矩形积木来搭建正方形,其中小红可以自由选择每块积木的大小,但必须是1k的长和宽。其中1kn2。小红想知道,自己最大可以搭建多大的正方形?请你帮小红计算正方形的边长。如果无法用恰好n块矩形拼成正方形,请输出1

输入描述:

第一行输入一个正整数t,代表询问的次数。
接下来的t行,每行输入一个正整数n,代表一次查询。
1t200000
1n1018

输出描述

输出t行,每行输入一个正整数,代表可以拼成的正方形最大边长。

in

3
2
4
6

out

-1
2
4

img

	cin>>n;
	if(n==2)cout<<"-1"<<endl;
	else cout<<(n-(n+1)/2)/3+(n+1)/2<<endl;

C-忽远忽近的距离

C-忽远忽近的距离_2023牛客寒假算法基础集训营3 (nowcoder.com)

小红希望你构造一个长度为nnn的排列,满足对于每个aia_iai,有2|aii|3。你能帮帮她吗?

注:数组下标从1n

排列是指长度为n的数组,1n每个正整数恰好出现一次。

输入描述:

一个正整数 n
1n105

输出描述

如果无解,请输出-1。
否则输出任意合法解即可。

in

4

out

3 4 1 2

这个就是简单的构造,我是根据4来拆分的

如果是模4余0,就正常输出

如果是模4余1,就把一个4变成5

如果是模4余2,就把一个4变成6

如果是模4余3,就把一个4变成5,把一个4变成6

key code

void solve(){
	//try it again.
	cin>>n;
	int cnt1=n/4;
	int cnt2=n%4;
	if(cnt2>cnt1*2){
		puts(-1);
	}
	else{
		if(cnt2==0){
			up(1,cnt1){
				cout<<o*4-1<<" "<<o*4<<" "<<o*4-3<<" "<<o*4-2<<" ";
			}
		}
		else if(cnt2==1){
			cout<<"4 5 1 2 3 ";
			up(2,cnt1){
				cout<<o*4<<" "<<o*4+1<<" "<<o*4-2<<" "<<o*4-1<<" ";
			}
		}
		else if(cnt2==2){
			cout<<"4 5 6 1 2 3 ";
			up(2,cnt1){
				cout<<o*4+1<<" "<<o*4+2<<" "<<o*4-1<<" "<<o*4<<" ";
			}
		}
		else if(cnt2==3){
			cout<<"4 5 1 2 3 9 10 11 6 7 8 ";
			up(3,cnt1){
				cout<<o*4+2<<" "<<o*4+3<<" "<<o*4<<" "<<o*4+1<<" ";
			}
		}
	}
}

D-宿命之间的对决

D-宿命之间的对决_2023牛客寒假算法基础集训营3 (nowcoder.com)

小红和小紫正在玩一个游戏。现在给定一个正整数n,小红和小紫轮流操作,每次取n的一个因子x,使得n减去x。谁先将n减到0谁输。
小红先手操作,她想知道在双方足够聪明的情况下,谁会获得最终的胜利?

输入描述:

一个正整数 n
1n1018

输出描述

如果小红获胜,则输出"kou"。
否则输出"yukari"

in

2

out

kou

显然最后谁是奇数谁就输掉了

奇数的人去掉一个因子必定会变成偶数

偶数的人可以通过减去1变成奇数

由此可知第一个收到奇数的人必败

注意!,别忘了开long long ,有个sb没开ll WA了九发

key code

    cin>>n;
    if(n&1)cout<<"yukari";
    else cout<<"kou";

E-公平守望的灯塔

E-公平守望的灯塔_2023牛客寒假算法基础集训营3 (nowcoder.com)

小红在平面直角坐标系上选择了两个点AB(保证两点不重合),它们的坐标分别为(xA,yA)(xB,yB)。小红希望你选择一个整点C,满足三角形ABC为以AB为斜边的等腰直角三角形。你能帮帮她吗?
整点的定义:横坐标和纵坐标均为整数。

输入描述:

四个整数xA,yA,xB,yB,用空格隔开。
109xA,yA,xB,yB109

输出描述

如果无解,请直接输出"No Answer!"
否则输出两个整数xC,yC,代表C点的坐标。有多解时输出任意即可。

in

1 0 0 1

out

0 0

这个题可以套用一下板子

先求出对应的两个点,再看这两个点满不满足题意

因为我们知道double 的答案应该怎么求

然后再强转成int型

如果强转以后仍然满足条件

那么就是成立的

key code

using T = long long;
struct Point {
    T x;
    T y;
    Point(T x = 0, T y = 0) : x(x), y(y) {}
     
    Point &operator+=(const Point &p) {
        x += p.x, y += p.y;
        return *this;
    }
    Point &operator-=(const Point &p) {
        x -= p.x, y -= p.y;
        return *this;
    }
    Point &operator*=(const T &v) {
        x *= v, y *= v;
        return *this;
    }
    friend Point operator-(const Point &p) {
        return Point(-p.x, -p.y);
    }
    friend Point operator+(Point lhs, const Point &rhs) {
        return lhs += rhs;
    }
    friend Point operator-(Point lhs, const Point &rhs) {
        return lhs -= rhs;
    }
    friend Point operator*(Point lhs, const T &rhs) {
        return lhs *= rhs;
    }
}p[4];
 
T dot(const Point &a, const Point &b) {
    return a.x * b.x + a.y * b.y;
}
 
T cross(const Point &a, const Point &b) {
    return a.x * b.y - a.y * b.x;
}
void solve(){
	//try it again.
	int A,B,C,D;
	cin>>A>>B>>C>>D;
	p[0].x=A;p[0].y=B;
	p[2].x=C;p[2].y=D;
	p[1].x =((p[0].x+p[2].x)+(p[2].y-p[0].y))/2;
	p[1].y =((p[0].y+p[2].y)+(p[0].x-p[2].x))/2;
	p[3].x =((p[0].x+p[2].x)-(p[2].y-p[0].y))/2;
	p[3].y =((p[0].y+p[2].y)-(p[0].x-p[2].x))/2;
	if(dot(p[1]-p[0],p[1]-p[3])==0){
		cout<<p[1].x<<" "<<p[1].y<<endl;
	}
	else if(dot(p[3]-p[0],p[2]-p[3])==0){
		cout<<p[3].x<<" "<<p[3].y<<endl;
	}
	else cout<<"No Answer!";
}

F-迎接终结的寂灭

F-迎接终结的寂灭_2023牛客寒假算法基础集训营3 (nowcoder.com)

宇宙的终极答案是42是怎么回事呢?宇宙的终极答案相信大家都很熟悉,但是宇宙的终极答案是42是怎么回事呢,下面就让小红带大家一起了解吧。
宇宙的终极答案是42,其实就是小红想知道,大家可能会很惊讶宇宙的终极答案怎么会是42呢?但事实就是这样,小红也感到非常惊讶。
这就是关于宇宙的终极答案是42的事情了,大家有什么想法呢,欢迎在评论区告诉小红一起讨论哦!

小红拿到了一个计算式,请你帮她计算宇宙的终极答案。

in

5*8+2

out

42

in

(3↑↑2)-sqrt(4!-2^3)*3+(3↑↑2)

out

42

in

the true answer of universe

out

42

题意:输出42即可

key code

printf("42");

本文作者:liangqianxing

本文链接:https://www.cnblogs.com/liangqianxing/p/17063226.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   liangqianxing  阅读(256)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起