1.40m大刀
第一行为n,即n组数据
每组数据的第一行为m len,意思是下一个为mm的方阵,len为刀长。
下列m行是mm的方阵数(都大于等于0)。0为没有补给,其他数为补给。
下一行为两个数字,x y,为玩家所在行列数。
如果一个位置(a,b)离玩家所处位置(x,y)的欧式距离小于刀长,即可被刀斩到,则刀长变成原来的刀长+该补给数。
要求输出刀长所能达到的最大长度~
忘记保存了。
就近遍历了所以满足条件的值。
如果没被访问过,就加上,否则跳过。
直到一次循环后,刀长没有发生变化,就跳出。
AC了
2.三种操作
第一行为n,即n组数据
每组数据的第一行是m k,意思为初始有m个集合,里面的元素分别为1,2,……,m。
k的意思是有k个操作,下列k行为k个操作的信息,每行第一个数a为第a个操作(有三种操作),每行其他的数是参数。
- 1 x y:查找xy各自所在的集合。如果不在一起,就合并;在一起,就啥都不做
- 2 x:查找x所在的集合。如果该集合只有x,就啥都不做。否则就把x移出来,让他自己一个集合
- 3 x:查找x所在的集合,输出该集合的元素总数。
很简单,,,我就不赘述了
3.错位排列
第一行为n,即n组数据
每组数据的第一行为m,为m个数
第二行为m个数,设为A数组
第三行为m个数的权值,第一个为V1即数字1的权值
要求得出一种错位排列,使得该值最少:
dis=V1*|loc[A1]-loc[B1]|+Vi*|loc[Ai]-loc[Bi]|+Vm*|loc[Am]-loc[Bm]|
public class Main {
private static int[] arr;
private static int[] wei;
private static int minDis;
private static Map<Integer,Integer> loc;
public static void main(String[] args) throws IOException, ParseException {
String strs = "3\n"+
"3\n"+
"1 2 3\n"+
"1 2 3\n"+
"4\n"+
"4 3 2 1\n"+
"1 1 1 1\n"+
"2\n"+
"1 2\n"+
"10 20\n";
InputStream is =