首先说一下为什么到现在才发表这篇文章:本来是打算出了成绩发一下自己的思路和受到的启发,但是中间发生了一个小插曲。一件非常戏剧性的事情,我被判为了作弊!!!原因是在比赛期间电脑弹出了网页,然后就判定我使用百度搜题,然后gg。。。
所以最近两周我一直在给负责我这片地区的老师申诉,可是到最后也没有申诉成功。他说了一句让我十分佩服的话:为了比赛的公平性,一定会有人被冤枉的。
你知道有人被冤枉你就不管不问?你就放纵我们被冤枉,任由找车队的找车队,上厕所的上厕所,掉线的掉线??? 借用之前在群里看到的一句话:我怎么知道我是在跟一个人比赛还是一个宿舍比赛呢?
真没得说,圈钱杯这名字名副其实,干的事也对得起这名字,被骂不亏。看我的名字也知道我对这次比赛有多生气了。
我这次写出了一道填空,两道10分的题第一道字符统计应该是过了ac了,但是最少刷题数不确定,因为等考完之后我才想到会不会一开始就所有人分数相同我没有判断,所以暂且按5分计算吧。两道15分的题,求阶乘写了三次 ,麻麻的,我真是个菜狗,本来用long,然后用string最后又想用format,最后还是没写出来,应该就能过三个样例点,估计5分吧,最大子矩阵就是一道dp,写起来还挺可以,估计可以ac。两道20分的题,数组切分是真的不会啊,有思路,使用向量型向量,做回溯,但是当时脑子抽抽,死活实现不了,唉,太可惜了。回忆迷宫我觉得挺简单的,目测ac。后面两道25分的题,我这个菜狗是肯定写不出来的,但是第一题发现了bug,因为他说有冷却时间为1的情况,也就是过一个红路灯就可以瞬移,过红绿灯是不需要时间的,所以,直接输出0去骗分就好了。拉箱子是我能想出来的吗?这题我真的绷不住。。
所以预测分数60+,应该可以保省二冲省一了,但是可恶的官方,给我误判作弊,申诉没用,唉,真的可惜,也很委屈,反正我以后是不会再报这个玩意了。
解题思路:直接取余,加6就好了
这道题,我没有写出来,我算的700多,但正确答案3138
我看好多解题思路都是桶排序,但是我直接使用数组索引,a-64即可,先排序,然后放入辅助数组,记录最大值max,然后扫描一遍辅助数组,将辅助数组内值为max的索引+64转char输出即可
package 今天;
import java.util.Arrays;
import java.util.Scanner;
public class 字符统计 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s = sc.next();
char[] c = s.toCharArray();
Arrays.sort(c);
int[] a= new int[27];
a[c[0]-64] = 1;
char q = c[0];
int p = 1;
int max = 1;
for(int i = 1;i<c.length; i++)
{
a[c[i]-64]++;
if(c[i] == q)
{
p++;
if(p>max)
{
max = p;
}
}
else
{
p = 1;
q = c[i];
}
}
for(int i = 1; i<27;i++)
{
if(a[i] == max)
{
System.out.print((char)(i+64));
}
}
}
}
首先判断中位数,然后让中位数减去每个数,得到正值输出,负值直接输出0,考虑得不够全面,不知道能不能ac
package 今天;
import java.util.Arrays;
import java.util.Scanner;
public class 最少刷题数 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] a = new int[n];
for(int i = 0; i<n; i++)
{
a[i] = sc.nextInt();
}
int[] b = a.clone();
int[] c = new int[n];//存放对应试题数量
Arrays.sort(b);
int q = b[n/2];
for(int i = 0; i<n; i++)
{
c[i] = q-a[i];
if(c[i]>0)
{
System.out.print(c[i]+1+" ");
}
else
{
System.out.print(0 +" ");
}
}
}
}
这道题我真的服,我写了三次,最后竟然因为这个给我判了作弊说我代码风格不是自己的????算了,越想越气,这道题我没有ac,不写题解了。
直接dp,从上往下,一直到N、M即可,利用二维数组记录值
package 今天;
/*
* 最大子矩阵
*/
import java.util.Scanner;
public class 求阶乘 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = sc.nextInt();
int[][] a = new int[n][m];
for(int i = 0; i<n; i++)
{
for(int j = 0; j<m; j++)
{
a[i][j] = sc.nextInt();
}
}
int l = sc.nextInt();
int[][] max = new int[n][m];
int[][] min = new int[n][m];
int[][] cha = new int[n][m];
max[0][0] = a[0][0];
min[0][0] = a[0][0];
for(int i =1 ; i<m; i++)
{
max[0][i] = Math.max(max[0][i-1], a[0][i]);
min[0][i] = Math.min(min[0][i-1], a[0][i]);
cha[0][i] = max[0][i] - min[0][i];
}
for(int i =1 ; i<n; i++)
{
max[i][0] = Math.max(max[i-1][0], a[i][0]);
min[i][0] = Math.min(min[i-1][0], a[i][0]);
cha[i][0] = max[i][0] - min[i][0];
}
for(int i = 1; i<n; i++)
{
for(int j = 1; j<m; j++)
{
max[i][j] = Math.max(Math.max(max[i-1][j], max[i][j-1]), a[i][j]);
min[i][j] = Math.min(Math.min(min[i-1][j], min[i][j-1]), a[i][j]);
cha[i][j] = max[i][j] - min[i][j];
}
}
int s = 0;
for(int i = n-1; i>=0; i--)
{
for(int j = m-1; j>=0; j--)
{
if(cha[i][j]<= l)
{
int q = (i+1)*(j+1);
if(q>=s)
{
s = q;
}
}
}
}
System.out.println(s);
}
}
这道题本来应该能写出来的,但是因为自己当时脑子抽抽,死活写不出回溯算法,gg了,pass了,看下一题
这个题就是找规律吧,N是步骤数量,可以利用二维数组当作平面,但是我们要考虑到他只走一个方向,所以二维数组大小为c[N*2+1][N*2+1],此时可以把爱丽丝起点设置为中间,然后,初始设置为0,走过的格子设置为1,最后遍历数组,1输出“ ”,0输出*即可
package 今天;
import java.util.Scanner;
public class 走迷宫 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
String s = sc.next();
char[] c = s.toCharArray();
int[][] a = new int[n*2+1][n*2+1];
a[n+1][n+1] = 1; //定义初始位置
int h = n+1;
int t = n+1;
int maxh = h;
int minh = h;
int maxt = t;
int mint = t;
for(int i = 0; i<n; i++)
{
if(c[i] == 'U')
{
h--;
a[h][t] = 1;
if(h<minh)
{
minh = h;
}
}
else if(c[i] == 'D')
{
h++;
a[h][t] = 1;
if(h>maxh)
{
maxh = h;
}
}
else if(c[i] == 'L') {
t--;
a[h][t] = 1;
if(t<mint)
{
mint = t;
}
}
else if(c[i] == 'R')
{
t++;
a[h][t] = 1;
if(t>maxt)
{
maxt = t;
}
}
}
for(int i =minh-1; i<=maxh+1; i++)
{
for(int j = mint-1; j<=maxt+1; j++)
{
if(i == minh-1 && j == mint-1)
{
if(a[i+1][j] == 0 && a[i][j+1] == 0)
{
System.out.print(" ");
}
}else if(i == minh-1 && j == maxt+1)
{
if(a[i][j-1] == 0 && a[i+1][j] == 0)
{
System.out.print(" ");
}
}
else if(i == maxh+1 && j == mint-1)
{
if(a[i][j+1] == 0 && a[i-1][j] == 0)
{
System.out.print(" ");
}
}
else if(i == maxh+1 && j == maxt+1)
{
if(a[i][j-1] == 0 && a[i-1][j] == 0)
{
System.out.print(" ");
}
}
else if(a[i][j] == 0)
{
System.out.print("*");
}
else
{
System.out.print(" ");
}
}
System.out.println();
}
}
}
这道题
这道题找到了bug,不知道有没有冷却时间为1的样例点,不知道能不能骗点分
package 今天;
import java.util.Scanner;
public class 红绿灯 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = sc.nextInt();
int k = sc.nextInt();
int v = sc.nextInt();
int[][] a = new int[m][3];
for(int i = 0; i<m; i++)
{
for(int j = 0; j<3; j++)
{
a[i][j] = sc.nextInt();
}
}
System.out.println(0);
}
}
这是碳基生物能想出来的题???我是菜狗,我不配。
唉,反正就挺可惜的,也挺委屈,努力准备了那么久,最后被误判作弊,啥都没有了。
再重复一下梦想:此生必造红桥杯!!!