银联高校极客挑战赛 初赛 第一场、第二场合集(3+3题)
生活随笔
收集整理的這篇文章主要介紹了
银联高校极客挑战赛 初赛 第一场、第二场合集(3+3题)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
第一場
A. 碼隊女朋友的王者之路
測試用例
測試1
測試2
1 1 1 1 0測試3
1 5 5 1 11100測試4
1 5 5 1 00000測試5
1 10 200 1 1111111110代碼
原文:https://blog.csdn.net/xylon_/article/details/96606663
自認為測試的比較全面了,還是沒有考慮到最高凈勝的坑。
坑點1:
那在這 M個賽季過程中,她的最高凈勝是多少場?
最高凈勝場其實是最后一個賽季里,截止到當(dāng)前賽季凈勝場最高的時候的總勝場
比如:
5個賽季,每個賽季的成績是
11001
一個賽季總凈勝場是 1+1-1-1+1=1
那么前四個月的總凈勝場是4,然后最后一個賽季打完前兩局,這時候凈勝場是2,所以全部賽季里凈勝場最高的時候是4+2=6
坑點2:
開long long
剩下的注意一下保護卡和負分就行了
正確代碼
#include<iostream> #include<string> using namespace std; #define ll long long #define inf 0x3f3f3f3f #define mem(a,b) memset(a,b,sizeof(a)) int main() {ll t,n,k,m,i;string a;cin>>t;while(t--){cin>>n>>k>>m;cin>>a;ll s=0;ll maxn=0;for(i=0;i<a.length();i++){if(a[i]=='1')s++;else{if(k>0)k--;elses--;}if(maxn<s)maxn = s;}//cout<<maxn<<endl;if(s>=0)cout<<(s*(m-1)+maxn)<<endl;elsecout<<0+maxn<<endl;}return 0; }以下是錯誤代碼
import java.text.ParseException; import java.util.Scanner;public class Main {public static void main(String[] args) throws ParseException {int total;Scanner sc = new Scanner(System.in);total = Integer.parseInt(sc.nextLine());// i組數(shù)據(jù)for (int i = 0; i < total; i++) {String str = sc.nextLine();String[] p = str.split(" ");long n = (long)Integer.parseInt(p[0]);long k = (long)Integer.parseInt(p[1]);// 保護卡long m = (long) Integer.parseInt(p[2]);long score = 0;long win = 0;long lose = 0;String line = sc.nextLine();// 000101for (int j = 0; j < n; j++) {int temp = Integer.parseInt(line.substring(j, j + 1));if (temp == 1) {// 贏了win++;} else {// 輸了lose++;}}// 抵消輸?shù)?/span>lose = lose - k;if (lose < 0)lose = 0;score = win - lose;if (score < 0)score = 0;System.out.println(score * m);}} }B. 自學(xué)圖論的碼隊弟弟
分析過程
測試用例
5
6 4 7
8 10 3
8 6 5
1 10 6
4 1 9
運行結(jié)果
5 4 3 2 1代碼
不知道哪里錯了
import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; import java.util.Scanner;//雖然結(jié)果應(yīng)該正確,但是輸出順序被打亂了 public class Main {public static void main(String[] args) {List<D> l = new ArrayList<D>();int total;Scanner sc = new Scanner(System.in);total = Integer.parseInt(sc.nextLine());for (int i = 0; i < total; i++) {String str = sc.nextLine();String[] p = str.split(" ");int a1 = Integer.parseInt(p[0]);int a2 = Integer.parseInt(p[1]);int v = Integer.parseInt(p[2]);if (a1 > a2) {int t = a2;a2 = a1;a1 = t;}l.add(new D(a1, a2, v));}// 將a1,a2順序調(diào)整:小的放前面for (int i = 0; i < l.size() - 1; i++) {if (l.get(i).a1 >= l.get(i).a1) {// 交換a1,a2int t = l.get(i + 1).a2;l.get(i + 1).a2 = l.get(i + 1).a1;l.get(i + 1).a1 = t;}}// 按照 a1優(yōu)先,a2其次 升序排序Collections.sort(l, new Comparator<D>() {@Overridepublic int compare(D u1, D u2) {// 重寫 Comparator 函數(shù)if (u1.a1 < u2.a1)return -1;else if (u1.a1 > u2.a1)return 1;else {if (u1.a2 < u2.a2)return -1;else if (u1.a2 > u2.a2)return 1;elsereturn 0;}}});// 針對首尾相接的邊 調(diào)整a1,a2順序for (int i = 0; i < l.size() - 1; i++) {if (l.get(i).a1 == l.get(i + 1).a1) {// 交換a1,a2int t = l.get(i + 1).a2;l.get(i + 1).a2 = l.get(i + 1).a1;l.get(i + 1).a1 = t;}}// 調(diào)整順序之后再排序Collections.sort(l, new Comparator<D>() {@Overridepublic int compare(D u1, D u2) {// 重寫 Comparator 函數(shù)if (u1.a1 < u2.a1)return -1;else if (u1.a1 > u2.a1)return 1;else {if (u1.a2 < u2.a2)return -1;else if (u1.a2 > u2.a2)return 1;elsereturn 0;}}});//計算編號最小的節(jié)點(這是一個數(shù)學(xué)問題,解n個二元一次方程)int sum = 0;int flag = 1;for (int i = 0; i < l.size(); i++) {sum += (l.get(i).v) * flag;flag = -flag;}sum /= 2;System.out.println(sum);// 求其余編號的節(jié)點值(數(shù)學(xué)問題,類似于數(shù)學(xué)歸納法)int last = sum;for (int i = 1; i < l.size(); i++) {System.out.println(l.get(i - 1).v - last);last = l.get(i - 1).v - last;}} }class D {int a1;int a2;int v;public D(int a1, int a2, int v) {this.a1 = a1;this.a2 = a2;this.v = v;} }C. 折扇染色
第二場
第一題 碼隊GO
代碼
AC版本代碼
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int total = sc.nextInt();for (int x = 0; x < total; x++) {int n = sc.nextInt();// 行int m = sc.nextInt();int[][] arr = new int[n][m];sc.nextLine();for (int i = 0; i < n; i++) {String str = sc.nextLine();for (int j = 0; j < m; j++) {if (str.charAt(j) == '*') {// 障礙arr[i][j] = 0;} else {// System.out.println("n=" + i + "m=" + i);arr[i][j] = 1;}}}int maxlen = 0;int m1 = arr.length;int n1 = arr[0].length;int res = 0;int[][] result = new int[m1][n1];// 矩陣初始化for (int i = 0; i < m1; i++) {result[i][0] = arr[i][0];res = Math.max(arr[i][0], res);}for (int j = 0; j < n1; j++) {result[0][j] = arr[0][j];res = Math.max(arr[0][j], res);}for (int i = 1; i < m1; i++) {for (int j = 1; j < n1; j++) {if (arr[i][j] == 1) {result[i][j] = Math.min(result[i - 1][j], Math.min(result[i][j - 1], result[i - 1][j - 1])) + 1;}res = Math.max(res, result[i][j]);}}maxlen = res;System.out.println((maxlen) * (maxlen));}} }運行超時代碼
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int total = sc.nextInt();for (int x = 0; x < total; x++) {int n = sc.nextInt();// 行int m = sc.nextInt();int[][] arr = new int[n][m];sc.nextLine();for (int i = 0; i < n; i++) {String str = sc.nextLine();for (int j = 0; j < m; j++) {if (str.charAt(j) == '*') {// 障礙arr[i][j] = 1;} else {// System.out.println("n=" + i + "m=" + i);arr[i][j] = 0;}}}int maxlen = 0;for (int i = 0; i < n; i++) {// System.out.println("i=" + i);for (int j = 0; j < m; j++) {// System.out.println("j=" + j);if (arr[i][j] == 0) {// 空label: for (int t = 0; t + i < n && t + j < m && t >= 0; t++) {// 畫一個邊長為t的正方形// System.out.println("t=" + t);for (int t1 = 0; t1 <= t; t1++) {// 檢測是否能畫成// System.out.println("t1=" + t1);for (int t2 = 0; t2 <= t; t2++) {// System.out.println("t2=" + t2);if (arr[i + t1][j + t2] == 1) {// 占用break label;}}}// 通過檢測maxlen = t > maxlen ? t : maxlen;}}}}System.out.println((maxlen + 1) * (maxlen + 1));}} }第二題 碼隊弟弟的求和問題
這是一個模積和問題
第三題 異世界幻想
總結(jié)
以上是生活随笔為你收集整理的银联高校极客挑战赛 初赛 第一场、第二场合集(3+3题)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【PAT甲级 Date时间比较】1006
- 下一篇: 【PAT甲级 素数判断 进制转换】101