笔试,牛客.kotori和n皇后​,牛客.AOE还是单体

2024-09-04 11:44

本文主要是介绍笔试,牛客.kotori和n皇后​,牛客.AOE还是单体,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

牛客.kotori和n皇后​编辑

牛客.AOE还是单体


牛客.kotori和n皇后

 想起来,我之前还写过n皇后的题,但是这个我开始只能想到暴力解法

判断是不是斜对角线,联想y=x+b和y=-x+b,假如在一条线上,那么他们的x和y会对应成比例,这个扫描+判断是一个O(n^2)的操作。

import java.util.*; 
import java.io.*;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {public static PrintWriter out=new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));public static Read in=new Read();public static void main(String[] args) throws IOException{int n=in.nextInt();long [][]a=new long[n][2];for(int i=0;i<n;i++){a[i][0]=in.nextInt();a[i][1]=in.nextInt();}int t=in.nextInt();//暴力解法//简易的n皇后问题.@while(t>0){int ret=0;int k=in.nextInt();for(int i=0;i<k-1;i++){if(a[i][0]==a[k-1][0]||a[i][1]==a[k-1][1]||a[i][0]+a[i][1]==a[k-1][0]+a[k-1][1]||a[i][1]-a[i][0]==a[k-1][1]-a[k-1][0]){ret=1;break;}}if(ret==1){out.println("Yes");}else{out.println("No");}t--;}out.close();}
}
class Read{//字符串裁剪StringTokenizer st=new StringTokenizer("");BufferedReader bf=new BufferedReader(new InputStreamReader(System.in));String next()throws IOException{while(!st.hasMoreTokens()){st=new StringTokenizer(bf.readLine());}return st.nextToken();}int nextInt() throws IOException{return Integer.parseInt(next());}
}

改进:哈希表,我们需要快速获取他的攻击范围,所以快速获取则使用哈希表,我们只需要获取他的攻击范围即可,怎么存,可以使用哈希Set,

问题,假如当前他第i个已经出现了会攻击的情况的话,那么后面的只需要存对应的消息,无需接着判断,因为一直会被攻击

import java.util.*;
import java.io.*;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {public static PrintWriter out =new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));public static Read in=new Read();public static void main(String[] args) throws IOException {int n = in.nextInt();long [][]a = new long[n + 1][2];
//四个哈希表一个存行,一个列,一个x,一个-x (我说的是斜率)HashSet<Long>row = new HashSet<>();HashSet<Long>col = new HashSet<>();HashSet<Long>dig1 = new HashSet<>();HashSet<Long>dig2 = new HashSet<>();int ret = (int)1e5 + 10;for (int i = 1; i <= n; i++) {a[i][0] = in.nextLong();a[i][1] = in.nextLong();if (ret != (int)1e5 + 10)continue;if (row.contains(a[i][0]) || col.contains(a[i][1])  ||dig1.contains(a[i][0] + a[i][1]) ||dig2.contains(a[i][1] - a[i][0])) {ret = i;}row.add(a[i][0]);col.add(a[i][1]);dig1.add(a[i][0] + a[i][1]);dig2.add(a[i][1] - a[i][0]);}int t = in.nextInt();//暴力解法//简易的n皇后问题.@while (t > 0) {int k = in.nextInt();
//k>=ret就是ret是从i开始,因为从i开始就可以与k保持一致下标,不然容易判断错误,多思考一步,麻烦if (k >= ret) {out.println("Yes");} else {out.println("No");}t--;}out.close();}
}
class Read {//字符串裁剪StringTokenizer st = new StringTokenizer("");//1.把字节流转化为字符流从IO设备中拿数据,先是建立一个内存缓冲区,然后以后都从他的内存缓冲区拿数据,BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));// 再从从内存缓冲区里面拿数据String next()throws IOException {//看他后面还有没有要裁切的数据while (!st.hasMoreTokens()) {//bf.nextLine:直接在内存缓存区里面,拿一行数据,交给这个字符串裁切对象st = new StringTokenizer(bf.readLine());}//再返回新读入这一行return  st.nextToken();}public String nextLine() throws IOException {return bf.readLine();}public    int nextInt() throws IOException {return Integer.parseInt(next());}public long nextLong() throws IOException {return Long.parseLong(next());}public double nextDouble() throws IOException {return Double.parseDouble(next());}
}

牛客.AOE还是单体

暴力解法,但是缺点就是复杂度过高,因为你可以看x和n范围,我们就知道了,这可能会循环很多次。

import java.util.*;// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别int  n = in.nextInt();long x = in.nextLong();long[]a = new long[n];long sum = 0;for (int i = 0; i < n; i++) {a[i] = in.nextLong();}int all = n;Arrays.sort(a);int p=0;while (n > x) {for (int i = 0; i < all; i++) {a[i]--;if (a[i] == 0) {n--;}else{p=i;}}sum += x;}if(all>x){for (int i=all-(int)x; i < all; i++) {if(a[i]>0){sum += a[i];}}}else{for(int i=0;i<n;i++){sum+=a[i];}}System.out.print(sum);}
}

import java.util.*;// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别int  n = in.nextInt();long x = in.nextLong();long[]a = new long[n];long sum = 0;for (int i = 0; i < n; i++) {a[i] = in.nextLong();}Arrays.sort(a);int p=0;if(n>x){for (int i=n-(int)x; i <n; i++) {if(a[i]>0){sum += a[i]-a[n-(int)x-1];}}sum+=x*a[n-(int)x-1];}else{for(int i=0;i<n;i++){sum+=a[i];}}System.out.print(sum);}
}

​​​​​​​ 

 

import java.util.*;
public class Solution {/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** * @param coins int整型一维数组 * @return int整型*/public int getCoins (ArrayList<Integer> coins) {int n=coins.size();int []a=new int[n+2];for(int i=0;i<n+2;i++){if(i==0||i==n+1){a[i]=1;}else{a[i]=coins.get(i-1);}}int[][]dp=new int[n+2][n+2];for(int i=n;i>=1;i--){for(int j=i;j<=n;j++){for(int k=i;k<=j;k++){dp[i][j]=Math.max(dp[i][k-1]+dp[k+1][j]+a[k]*a[i-1]*a[j+1],dp[i][j]);}}}return dp[1][n];}
}

这篇关于笔试,牛客.kotori和n皇后​,牛客.AOE还是单体的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1135925

相关文章

题目1254:N皇后问题

题目1254:N皇后问题 时间限制:1 秒 内存限制:128 兆 特殊判题:否 题目描述: N皇后问题,即在N*N的方格棋盘内放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在同一斜线上。因为皇后可以直走,横走和斜走如下图)。 你的任务是,对于给定的N,求出有多少种合法的放置方法。输出N皇后问题所有不同的摆放情况个数。 输入

每日一题|牛客竞赛|四舍五入|字符串+贪心+模拟

每日一题|四舍五入 四舍五入 心有猛虎,细嗅蔷薇。你好朋友,这里是锅巴的C\C++学习笔记,常言道,不积跬步无以至千里,希望有朝一日我们积累的滴水可以击穿顽石。 四舍五入 题目: 牛牛发明了一种新的四舍五入应用于整数,对个位四舍五入,规则如下 12345->12350 12399->12400 输入描述: 输入一个整数n(0<=n<=109 ) 输出描述: 输出一个整数

【秋招笔试】9.07米哈游秋招改编题-三语言题解

🍭 大家好这里是 春秋招笔试突围,一起备战大厂笔试 💻 ACM金牌团队🏅️ | 多次AK大厂笔试 | 大厂实习经历 ✨ 本系列打算持续跟新 春秋招笔试题 👏 感谢大家的订阅➕ 和 喜欢💗 和 手里的小花花🌸 ✨ 笔试合集传送们 -> 🧷春秋招笔试合集 🍒 本专栏已收集 100+ 套笔试题,笔试真题 会在第一时间跟新 🍄 题面描述等均已改编,如果和你笔试题看到的题面描述

代码训练营 Day26 | 47.排序II | 51. N-皇后 |

47.排序II 1.跟46题一样只不过加一个树层去重 class Solution(object):def backtracking(self,nums,path,result,used):# recursion stopif len(path) == len(nums):# collect our setresult.append(path[:])return for i in range(

牛客小白月赛100部分题解

比赛地址:牛客小白月赛100_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞赛OJ A.ACM中的A题 #include<bits/stdc++.h>using namespace std;#define ll long long#define ull = unsigned long longvoid solve() {ll a,b,c;cin>>a>>b>

两道笔试题

“char a='\72'”是什么意思? 这么理解:\为转义字符,\072转义为一个八进制数072,也就是十进制数的58买一送一,将转义字符对照表也一并贴给你吧:转义字符 意义 ASCII码值(十进制) \a 响铃(BEL) 007 \b 退格(BS) 008 \f 换页(FF) 012 \n 换行(LF) 010 \r 回车(CR) 013 \t 水平制表(HT) 009 \v 垂直制表(VT

华为23年笔试题

消息传输 题目描述 在给定的 m x n (1 <= m, n <= 1000) 网格地图 grid 中,分布着一些信号塔,用于区域间通信。 每个单元格可以有以下三种状态:  值 0 代表空地,无法传递信号;  值 1 代表信号塔 A,在收到消息后,信号塔 A 可以在 1ms 后将信号发送给上下左右四个方向的信号塔; 值 2 代表信号塔 B,在收到消息后,信号塔 B 可以在 2ms

实现的动态规划问题华为笔试题C++实现

秋招刷力扣题,我觉得我对动态规划不是熟练,在此处做总结 动态规划(Dynamic Programming,DP)算法通常用于求解某种具有最优性质的问题。在这类问题中,可能会有许多可行解,每一个解都对应一个值,我们希望找到具有最优值的解。我觉得最大的问题就是对问题的分解,分解后的问题与分解前的问题具有相同的决策机制,将决策机制进行抽象,最终可以得到对应的解; 动态规划中开始介绍的爬楼梯等问题,答

某公司笔试编程题

参加了某公司编程题,这些题都来自牛客网,记录总结吧! 一、蛇形矩阵 题目描述 蛇形矩阵是有1开始的自然数依次排列成的一个上三角矩阵. 接口说明 void GetResult(int Num, int* pResult);输入参数:int Num :输入的正整数N输出参数:int *pResult: 指向放蛇形矩阵的字符串指针指针指向的内存区域保证有效 样例输入: 4

牛客小白月赛100(A,B,C,D,E,F三元环计数)

比赛链接 官方讲解 这场比较简单,ABC都很签到,D是个不太裸需要预处理的 B F S BFS BFS 搜索,E是调和级数暴力枚举,F是三元环计数。三元环考的比较少,没见过可能会偏难。 A ACM中的A题 思路: 就是枚举每个边变成原来的两倍,然后看看两短边之和是否大于第三边即可。 不能只给最短边乘 2 2 2,比如 1 4 8 这组数据,也不能只给第二短边乘 2 2 2,比