J-合唱比赛
本题思路:n个评委和你给选手评分,你评的分可能是最高分也可能是最低分,当你的评分为最高分是就在n个评委中去掉一个最低分,当你的评分为最低分是就在n个评委中去掉一个最高分。所以就是n个评委所评总分分别减去最低分和最高分出去n-1来求范围。
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin>>n;
int i;
double a[n];
int max1=-1,min1=111;
double sum=0;
for(i=0;i<n;i++)
{
cin>>a[i];
if(a[i]>max1)
max1=a[i];
if(min1>a[i])
min1=a[i];
sum=sum+a[i];
}
double sum1=(sum-max1)/(n-1);
double sum2=(sum-min1)/(n-1);
printf("%.6lf %.6lf",sum1,sum2);
return 0;
}
E-动物朋友
本题思路:利用队列来求。在队列中的元素总和大于目标值的话就把对列首元素弹出,总值减去该元素,在队列中的元素总和小于目标值的话就继续往队列里添加元素,总值加上该元素,总值等于目标值的话cont++;
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,m;
cin>>n>>m;
queue<int> k;
int sum=0;
int cont=0;
while(n--)
{
int a;
cin>>a;
sum=sum+a;
k.push(a);
if(sum<m)
{
continue;
}
else
if(sum>m) {
while(sum>m)
{
int c=k.front();
sum=sum-c;
k.pop();
if(sum==m)
{
cont++;
break;
}
}
}
else if(sum==m)
{
cont++;
}
}
cout<<cont;
return 0;
}
G-Reverse
本题思路:统计相互挨着1的个数,让最大的两个相加。
#include<bits/stdc++.h>
using namespace std;
int b[1000000];
bool cmp(int a,int b)
{
return a>b;
}
int main()
{
int n;
cin>>n;
int c=0;
int i=0;
while(n--)
{
char a;
cin>>a;
if(a=='1')
{
c++;
} else {
b[i]=c;
c=0;
i++;
}
}
b[i]=c;
i++;
sort(b,b+i,cmp);
int sum=b[0]+b[1];
cout<<sum;
return 0;
}
K-以撒和隐藏房间
本题思路:对每个为0的位置进行统计,统计该位置周围1的个数和2的个数,如果1的个数为3并且2的个数为0的话就是隐藏房间。
#include<bits/stdc++.h>
using namespace std;
int n,m;
struct dian{
char point;
int a1;
int a2;
}d[1002][1002];
int main()
{
int cont=0;
cin>>n>>m;
int i,j;
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
cin>>d[i][j].point;
d[i][j].a1=0;
d[i][j].a2=0;
}
}
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
if(d[i-1][j].point=='1'&&(i-1)>=1&&j>=1&&(i-1)<=n&&j<=m)
d[i][j].a1++;
if(d[i-1][j].point=='2'&&(i-1)>=1&&j>=1&&(i-1)<=n&&j<=m)
d[i][j].a2++;
if(d[i+1][j].point=='1'&&(i+1)>=1&&j>=1&&(i+1)<=n&&j<=m)
d[i][j].a1++;
if(d[i+1][j].point=='2'&&(i+1)>=1&&j>=1&&(i+1)<=n&&j<=m)
d[i][j].a2++;
if(d[i][j-1].point=='1'&&(j-1)>=1&&i>=1&&(j-1)<=n&&i<=m)
d[i][j].a1++;
if(d[i][j-1].point=='2'&&(j-1)>=1&&i>=1&&(j-1)<=n&&i<=m)
d[i][j].a2++;
if(d[i][j+1].point=='1'&&(j+1)>=1&&i>=1&&(j+1)<=n&&i<=m)
d[i][j].a1++;
if(d[i][j+1].point=='2'&&(j+1)>=1&&i>=1&&(j+1)<=n&&i<=m)
d[i][j].a2++;
if(d[i][j].a1==3&&d[i][j].point=='0'&&d[i][j].a2==0)
cont++;
}
}
if(cont==0)
{
cout<<"NO"<<endl;
}
else {
cout<<"YES"<<endl<<cont<<endl;
}
return 0;
}
F-松鼠排序
本题思路:把抢位的元素换走。
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5+10;
int n,m;
int a[N];
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
int ans=0;
for(int i=1;i<=n;i++)
{
while(a[i]!=i)
{
swap(a[i],a[a[i]]);
ans++;
}
}
cout<<ans<<endl;
}
A-你也喜欢数学吗
本题思路:按照题目给的公式套。
#include<iostream>
using namespace std;
typedef long long ll;
const int mod=1e9+7;
ll k;
ll qmi(ll a,ll b){
ll res=1;
while(b){
if(b&1) res=(res*a)%mod;
b>>=1;
a=(a*a)%mod;
}
return res;
}
int main(){
cin>>k;
k%=mod;
ll sum=0;
sum=(k*(k+1)%mod*(2*k+1)%mod*qmi(6,mod-2)%mod+k*(k+1)/2)%mod*qmi(2,mod-2)%mod;
cout<<sum<<endl;
return 0;
}