A. Grade Allocation
取可以拿的最高分和限制的分数的最小值
#include <bits/stdc++.h>
using namespace std;
int main(){
int t;cin>>t;
while(t--){
int n,m;cin>>n>>m;
int sum=0;
for(int i=1;i<=n;i++){
int s;cin>>s;
sum+=s;
}
if(sum>m)cout<<m<<endl;
else cout<<sum<<endl;
}
}
B. String Modification
n-k为奇数时把前k位截取,连接到最后
为偶数时,把前k位截取,翻转后,连接到最后
#include <bits/stdc++.h>
using namespace std;
int main(){
int t;cin>>t;
while(t--){
int n;cin>>n;
string s;cin>>s;
string s2,s3,s4;
string mins=s;
int mink=1;
for(int i=2;i<=n;i++){
s2=s.substr(0,i-1);//截取前k位
s3=s.substr(i-1,n-i+1);//截取后几位
if((n-i)%2==0)reverse(s2.begin(),s2.end());
s4=s3+s2;
if(s4<mins){
mins=s4;
mink=i;
}
}
cout<<mins<<endl;
cout<<mink<<endl;
}
}
C. Primitive Primes
本原多项式
两个多项式都从最大的系数往最小的系数遍历
找到第一个不能整除p的系数
相加即为答案
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define INF 0x3f3f3f3f
ll p;
int e,m;
int a,b;
int main(){
cin>>e>>m>>p;
int qq=-1,ww=-1;
for(int i=0;i<e;++i){
scanf("%d",&a);
if(a%p!=0&&qq==-1){
qq=i;
}
}
for(int j=0;j<m;++j){
scanf("%d",&b);
if(b%p!=0&&ww==-1){
ww=j;
}
}
cout<<qq+ww;
return 0;
}