A石头游戏
#include<bits/stdc++.h>
using namespace std;
int a[105],t,n;
int main(){
cin>>t;
while(t--){
cin>>n;
int minn=101,maxx=0;
int m1,m2;
for(int i=1;i<=n;i++){
cin>>a[i];
if(maxx<a[i]){
maxx=a[i];
m1=i;
}
if(minn>a[i]){
minn=a[i];
m2=i;
}
}
int ans=max(m1,m2);
ans=min(ans,m1+n-m2+1);
ans=min(ans,n-m1+1+m2);
ans=min(ans,max(n-m1+1,n-m2+1));
cout<<ans<<"\n";
}
return 0;
}
B朋友与糖果
#include<bits/stdc++.h>
using namespace std;
int t,n,a[200005];
int main(){
cin>>t;
while(t--){
cin>>n;
long long sum=0;
for(int i=1;i<=n;i++){
cin>>a[i];
sum+=a[i];
}
if(sum%n!=0){
cout<<-1<<"\n";
continue;
}
int k=sum/n,ans=0;
for(int i=1;i<=n;i++){
if(a[i]>k){
ans++;
}
}
cout<<ans<<"\n";
}
return 0;
}
C符合要求的对数
#include<bits/stdc++.h>
using namespace std;
int t,n,l,r,a[200005];
long long ans;
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin>>t;
while(t--){
cin>>n>>l>>r;
for(int i=1;i<=n;i++){
cin>>a[i];
}
sort(a+1,a+1+n);
if(a[n]+a[n-1]<l){
cout<<0<<"\n";
continue;
}
ans=0;
for(int i=1;i<=n;i++){
int idx1=lower_bound(a+1+i,a+1+n,l-a[i])-a;
int idx2=upper_bound(a+1+i,a+1+n,r-a[i])-a;
ans=ans+idx2-idx1;
}
cout<<ans<<"\n";
}
return 0;
}
D除法问题
#include<bits/stdc++.h>
using namespace std;
int t,a,b,k;
int fun(int x){
int cnt=0;
for(int i=2;i*i<=x;i++){
while(x%i==0){
x=x/i;
cnt++;
}
}
if(x>1){
cnt++;
}
return cnt;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin>>t;
while(t--){
cin>>a>>b>>k;
if(k==1){
if((a%b==0||b%a==0)&&a!=b){
cout<<"YES"<<"\n";
}
else{
cout<<"NO"<<"\n";
}
}
else{
int ka=fun(a),kb=fun(b);
if(ka+kb>=k){
cout<<"YES"<<"\n";
}
else{
cout<<"NO"<<"\n";
}
}
}
return 0;
}
F有趣的加法
#include<bits/stdc++.h>
using namespace std;
int t;
long long l,r,ans;
int main(){
cin>>t;
while(t--){
ans=0;
cin>>l>>r;
ans=ans+r-l;
l=l-l%10;
ans=ans+(r-l)/10;
l=l-l%100;
ans=ans+(r-l)/100;
l=l-l%1000;
ans=ans+(r-l)/1000;
l=l-l%10000;
ans=ans+(r-l)/10000;
l=l-l%100000;
ans=ans+(r-l)/100000;
l=l-l%1000000;
ans=ans+(r-l)/1000000;
l=l-l%10000000;
ans=ans+(r-l)/10000000;
l=l-l%100000000;
ans=ans+(r-l)/100000000;
l=l-l%1000000000;
ans=ans+(r-l)/1000000000;
cout<<ans<<"\n";
}
return 0;
}
G礼品套装
#include<iostream>
#include<cmath>
using namespace std;
long long x,y,a,b;
bool check(int mid){
int l=ceil(1.0*(x-b*mid)/(a-b));
int r=floor(1.0*(y-a*mid)/(b-a));
l=max(l,0),r=min(r,mid);
return l<=r;
}
int main(){
int t;
cin>>t;
while(t--){
cin>>x>>y>>a>>b;
if(a==b){
cout<<(int)min(x/a,y/a)<<endl;
continue;
}
if(x>y){
swap(x,y);
}
if(a>b){
swap(a,b);
}
int l=0,r=max(x,y);
while(l<r){
int mid=(l+r+1)/2;
if(check(mid))l=mid;
else r=mid-1;
}
cout<<l<<endl;
}
return 0;
}