解题思路
遍历初始整数的全排列,然后计算每一个排列与原排列的的步数找到花费的最小值就行了
代码
#include <iostream>
#include <cstdio>
#include <fstream>
#include <algorithm>
#include <cmath>
#include <deque>
#include <vector>
#include <queue>
#include <string>
#include <cstring>
#include <map>
#include <stack>
#include <set>
using namespace std;
int g[5];
int j[5];
int gg[5];
int min2;
int d(int sum)
{
int t=0,s[4]={sum/1000,sum/100%10,sum/10%10,sum%10};
for(int x=0;x<4;x++)
{
if(abs(s[x]-j[x])>=5)
{
t=t+9-abs(s[x]-j[x]);
}
else
{
t=t+abs(s[x]-j[x]);
}
}
return t;
}
int dfs(int sum,int k)
{
if(sum>999)
{
int t=d(sum)+k;
if(t<min2)
min2=t;
return 0;
}
else
{
for(int x=0;x<4;x++)
{
if(gg[x]==0)
{
gg[x]=1;
dfs(sum*10+g[x],k++);
gg[x]=0;
}
}
}
}
int main()
{
int t,a,b;
scanf("%d",&t);
while(t--)
{
min2=999999999;
scanf("%d%d",&a,&b);
for(int x=3;x>=0;x--)
{
g[x]=a%10;
j[x]=b%10;
a/=10;
b/=10;
}
dfs(0,0);
printf("%d\n",min2);
}
return 0;
}
解题思路
我们只要将他进行模拟就可以发现这个导出机器花费的时间是有规律的,当我们同时利用两个机器时是最快的,当需要打的票为偶数是我们可以在完成偶数次的打印后无需在等,但当需要打的票为奇数次时,还要再等到一台机器冷却结束,我们还要对操作时间和冷却时间进行判断,当操作时间大于等于冷却时间时无需等待,当冷却时间大于操作时间时就还要等 冷却时间-操作时间.
代码
#include <iostream>
#include <cstdio>
#include <fstream>
#include <algorithm>
#include <cmath>
#include <deque>
#include <vector>
#include <queue>
#include <string>
#include <cstring>
#include <map>
#include <stack>
#include <set>
using namespace std;
int main()
{
long long x,y,a,b,n,t;
long long sum=0,k=0;
scanf("%lld",&t);
while(t--)
{
scanf("%lld%lld%lld",&a,&b,&n);
k=n/2;
if(a>b)
sum=k*((2*b)+a-b);
else
sum=k*2*b;
k*=2;
if(k<n)
{
sum+=b;
}
else if(a>b)
{
sum-=(a-b);
}
printf("%lld\n",sum);
}
return 0;
}
java学习
''==''和equals方法的区别
''==''在对基本数据类型进行比较时比较的是变量所保存的值,当==对引用数据类型进行比较时也使用统一规则,但此时引用类型变量所保存的是地址值,所以此时==比较的是他们的地址值.
public class Main {
public static void main(String[] args)
{
String a=new String("jjm");
String b="jjm";
String c="jjm";
int x=3;
int y=3;
System.out.println(x==y);
System.out.println(b==c);
System.out.println(a==b);
System.out.println(a.equals(b));
}
}
equals是一种方法这个方法是给我们进行重写的,目的是使得有一种方法区别与''==''可以做到''==''做不到的功能,equals方法空出来的目的是为了让每一个类都有一个准确的判断两个类是否相同的方法.在String中equals已被重写,他判断两个字符串相等的标准是要两个字符串所包含的字符序列相同,通过 equalsO比较将返回 true,否则返回false.
正确的重写equals的方法应该满足以下条件
类里包含了五种成员,他们分别是成员变量,方法,构造器,代码块,内部类,能被static修饰的只有成员变量,方法,代码块,内部类.
final
final关键字用于修饰类,变量和方法,被final关键字修饰的类,变量和方法不可被改变,事实上被final修饰的变量一旦获得的初始值就不能被重新赋值,而被final修饰的方法不能被重写,但final修饰的方法可以被重载只是不能重写而已,final修饰的类不能有子类.
类变量: 必须在静态初始化块中指定初始值或声明该类变量时指定初始值,而且只能在两个地方的其中之一指定。
实例变量:必须在非静态初始化块,声明该实例变量或构造器中指定初始值,而且只能在三个地方的其中之一指定。
不要在初始化之前直接访问final成员变量,但java允许通过方法来访问final成员变量,此时系统会将final默认初始化为0;
当使用 final 修饰基本类型变量时,不能对基本类型变量重新赋值,因此基本类型变量不能被改变。 但对于引用类型变量而言,它保存的仅仅是一个引用,所以final 只保证这个引用类型变量所引用的地址不 会改变, 即一直引用同一个对象,但这个对象完全可以发生改变.
public class Main {
public static void main(String[] args)
{
final int [] iArr={5,6,12,9};
System.out.println(Arrays.toString(iArr));
iArr[2]=3;
System.out.println(Arrays.toString(iArr));
iArr=NULL; //这一句语句会报错因为final保证了引用类型变量引用的地址不会改变
}
}
集合
ArrayList类
ArrayList类提供了很多方法,提供的方法有:
add():向集合内添加元素;
remove():删除集合内的元素
size():计算集合的大小
clear():删除集合内所有的元素
contains():判断元素是否在集合内
ArrayList中的元素是对象