A:题意 给s1 s2 要求逐个找出s2中的字母。
题解:在s1中找出s2每个字母的位置,统计位置的距离。特判当只有一个字母的时候,答案为哦0
#include<iostream>
#include<cstring>
#include<cmath>
#include<stack>
#include<cstdio>
using namespace std;
int t;
string s1,s2;
int a[1000];
int main(){
cin>>t;
while(t--){
cin>>s1>>s2;
int cnt=0;
int len=s2.size();
for(int i=0;i<len;i++){
for(int j=0;j<26;j++){
if(s2[i]==s1[j]){
a[++cnt]=j+1;
break;
}
}
}
int ans=0;
for(int i=2;i<=cnt;i++){
ans+=abs(a[i]-a[i-1]);
}
if(cnt==1) ans=0;
cout<<ans<<endl;
}
return 0;
}
B:题意
给定初始位置x,当前位置为奇数时,下次位置在x+i,偶数为x-i ,i为第几次跳跃。
题解:跳动距离有规律,每四次跳跃返原处。具体规律看代码。
#include<iostream>
#include<cstring>
#include<cmath>
#include<stack>
#include<cstdio>
#define int long long
using namespace std;
int t;
int x,n;
int solve(){
int ans=0;
if(x%2==0){
if(n%4==2) ans=x+1;
if(n%4==3) ans=x+(n)+(n-1)-(n-2);
if(n%4==1) ans=x-n;
if(n%4==0) ans=x;
}
else{
if(n%4==0) ans=x;
if(n%4==2) ans=x-1;
if(n%4==3) ans=x+(n-2)-(n-1)-n;
if(n%4==1) ans=x+n;
}
return ans;
}
signed main(){
cin>>t;
while(t--){
cin>>x>>n;
cout<<solve()<<endl;
}
return 0;
}
C:题意
找出数组中最小的数字,数组中的其他数字减去这个数,并将这个数字从数组中去除,直到这个数组中剩下一个数。找出这个过程中数组中所有最小的数的最大为多少。
题解:排序,模拟过程,暴力查找。
#include<iostream>
#include<algorithm>
#define int long long
using namespace std;
int t;
int n;
int a[200005];
int solve(){
int k=a[1];
int ans=a[1];
for(int i=2;i<=n;i++){
ans=max(ans,a[i]-k);
k+=a[i]-k;
}
return ans;
}
signed main(){
std::ios::sync_with_stdio(false);
std::cin.tie(0);
cin>>t;
while(t--){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
sort(a+1,a+1+n);
if(n==1) cout<<a[1]<<endl;
else{
cout<<solve()<<endl;
}
}
return 0;
}
D:题意
给定n个数字与对应的字母,R表示这个数字可以无限加,B表示这个数字可以无限减。问能否使1到n每个数字只出现一次。
题解:按照字母排序,B排前,R排后。判断是否能构造出1~n的一个全排列。
#include<iostream>
#include<algorithm>
#define int long long
using namespace std;
struct T{
int d;
char s;
}a[200005];
int t,n;
bool cmp(T x,T y){
if(x.s==y.s) return x.d<y.d;
return x.s<y.s;
}
bool solve(){
for(int i=1;i<=n;i++){
if((a[i].d>i&&a[i].s=='R')||(a[i].d<i&&a[i].s=='B')){
return false;
}
}
return true;
}
signed main(){
cin>>t;
while(t--){
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i].d;
for(int i=1;i<=n;i++) cin>>a[i].s;
sort(a+1,a+1+n,cmp);
if(solve()) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
}
E:待补