A. Potion-making
题意:大概就是啤酒兑水的问题,要求你对完之后酒精的浓度可以达到k,然后众所周知加一升的水,浓度就会降,加一升酒精就会升(你不是废话吗? ),求最少要加多少升酒精和水。
思路:其实细想一下如果要25的浓度其实就是25/100=1/4,
而要10的浓度是10/100,约分一下就是1/10。
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,i,j,t;
cin>>t;
while(t--){
cin>>n;
int d1=__gcd(100,n);
cout<<max(n/d1,100/d1)<<endl;
}
return 0;
}
B. Permutation Sort
题意:一堆打乱的序列,问你需要进行多少次洗牌式处理能还原正常序列,不能对整个序列进行洗牌操作。
思路:三种情况
①已经排好----ans=0 example:1 2 3 4 5
②首或者尾排好----ans=1 example:1 3 2 4 5、1 5 2 3 4
③首尾都没排好有两种情况:
①:恰好首在尾,尾在首:5 2 3 4 1----ans=3
②:其他情况: 2 3 4 1 5 ----ans=2
#include<bits/stdc++.h>
using namespace std;
const int maxn=55;
int a[maxn];
int main()
{
int n,i,j,t;
cin>>t;
while(t--){
cin>>n;
int f1=0;
for(i=0;i<n;i++){
cin>>a[i];
if(a[i]!=i+1) f1=1;
}
if(f1==0){
cout<<0<<endl;
}
else {
int d1,d2;
for(i=0;i<n;i++){
if(a[i]!=i+1){
d1=i;break;
}
}
for(i=n-1;i>=0;i--){
if(a[i]!=i+1){
d2=i;break;
}
}
if(d1!=0||d2!=n-1){
cout<<1<<endl;
}
else if(a[d1]==n&&a[d2]==1){
cout<<3<<endl;
}
else {
cout<<2<<endl;
}
}
}
}