A
题意:给你一个字符串,问你转化成一个包含 “ACTG” 的串 最少需要多少次 z的前一个是y 后一个是z
#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <cmath>
#define maxn 100050
using namespace std;
int main()
{
int t;
cin>>t;
string s;
cin>>s;
int minn=maxn;
for(int i=0;i<=t-4;i++)
{
int ans=min(26-abs(s[i]-'A'),abs(s[i]-'A'))+min(26-abs(s[i+1]-'C'),abs(s[i+1]-'C'))+min(26-abs(s[i+2]-'T'),abs(s[i+2]-'T'))+min(abs(s[i+3]-'G'),26-abs(s[i+3]-'G'));
minn=min(ans,minn);
}
cout<<minn<<endl;
}
B
题意:给你n行m列的矩阵 每一行取一个数字 进行 异或^ 看是否存在最后的值能够大于0
#include <bits/stdc++.h>
using namespace std;
int main() {
int arr[510][510];
int n,m;
cin>>n>>m;
int ans=0;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
cin>>arr[i][j];
}
ans^=arr[i][1];
}
if(ans!=0)
{
cout<<"TAK"<<endl;
for(int i=1;i<=n;i++)
{
cout<<1<<" ";
}
return 0;
}
for(int i=1;i<=n;i++)
{
for(int j=2;j<=m;j++)
{
if(arr[i][j]!=arr[i][1])
{
cout<<"TAK"<<endl;
for(int k=1;k<=n;k++)
{
if(i==k)
{
cout<<j<<" ";
}
else
{
cout<<1<<" ";
}
}
cout<<endl;
return 0;
}
}
}
cout<<"NIE"<<endl;
return 0;
}
C
题意:给你两个数组,一个只有奇数(1,3,5……),一个只有偶数(2,4,6……),让你合并为一个数组(第一次从奇数组拿一个过来即为1;第二次从偶数组拿两个数进来即为2,4;第三次从奇数组拿四个数进来,即为3,5,7,9,类似后推。)给你 l到r 区间问你他们的总和是多少 结果对1e9+7取模 (找规律)
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const ll mod=1e9+7;
ll find(ll x)
{
ll a[5]={0,0};
ll c=1,flag=1;//1 为奇数 0为偶数
while(x)
{
a[flag]+=min(x,c);
x-=min(x,c);
flag^=1;
c<<=1;
}
// 这是一个规律
//奇数 1 3 5 7 4*4
//偶数 2 4 6 8 4*5
ll sum=((a[1]%mod)*(a[1]%mod))%mod;// 奇数和
sum+=((a[0]%mod)*((a[0]+1)%mod))%mod;// 偶数和
return sum%mod;
}
int main() {
ll l,r;
cin>>l>>r;
cout<<(find(r)-find(l-1)+mod)%mod<<endl;
return 0;
}
D
题意:给你n组数 将其排序 使a⋅(j−1)+b⋅(n−j) j为当前位置 总和最小
将 a⋅(j−1)+b⋅(n−j) 化简 (a-b)*j-a+b*n 可将这个式子看成的为j的函数 只需将a-b从大到小排序即可
#include <bits/stdc++.h>
#define ll long long
using namespace std;
struct node{
ll a,b;
}r[100010];
ll cmp(node x,node y)
{
return (x.a-x.b)>(y.a-y.b);
}
int main()
{
ll n;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>r[i].a>>r[i].b;
}
sort(r+1,r+1+n,cmp);
ll ans=0;
for(int i=1;i<=n;i++)
{
//cout<<r[i].a-r[i].b<<endl;
ans+=(r[i].a-r[i].b)*i-r[i].a+r[i].b*n;
}
cout<<ans<<endl;
return 0;
}