Problem A
#include<iostream>
#include<algorithm>
using namespace std;
int main() {
int n,i;
cin>>n;
int a[n];
for(i=0;i<n;++i){
cin>>a[i];
}
int b[2];
int k1=0;
int k2=0;
if(i>0){
b[0]=a[0];
k1++;
}else{
return 0;
}
for(int i=1;i<n;++i){
if(a[i]!=b[0]){
k2++;
}else{
k1++;
}
if(k2!=0&&(k2<k1||k2>k1)){
cout<<i+1<<" "<<a[i];
break;
}
}
return 0;
}
Problem B
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
long int n;
long int maxx=0,minn=100000;
long int a[100000];
while(~scanf("%ld",&n)&&n){
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
if(a[i]>=maxx){
maxx=a[i];
}
if(a[i]<minn){
minn=a[i];
}
}
printf("%d %d",maxx,minn);
}
return 0;
}
Problem C
#include <bits/stdc++.h>
using namespace std;
const int mod=2e5+5;
typedef long long ll;
int A[55];
int main()
{
double a,b,c,d;
int cnt=0;
scanf("%lf%lf%lf%lf",&a,&b,&c,&d);
for(double i=-100;i<=100;)
{
if(cnt==3) break;
double sum=a*i*i*i+b*i*i+c*i+d;
if(fabs(sum)<0.000001)
{
cnt++;
printf("%0.2lf ",i);
}
i+=0.01;
}
return 0;
}
Problem D
#include<cstdio>
#include<iostream>
using namespace std;
long long pow(long long a,long long b,long long p){
long long ret=1%p;
while(b){
if(b&1) ret=ret*a%p;
b>>=1;a=a*a%p;
}
return ret;
}
int main(){
long long a,b,p;cin>>a>>b>>p;
cout<<a<<"^"<<b<<" mod "<<p<<"="<<pow(a,b,p)<<endl;
return 0;
}
Problem E
#include<iostream>
#include<string>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
const double eps=1e-10;//一开始精度为1e-8,错误12%,改完后终于正确了0v0
double f(double x)
{
double y;
y=exp(x*log(2))+exp(x*log(3))-exp(x*log(4));
return y;
}
int main()
{
double x,e=1,x1,x2;int m,mod=1;
cin>>m;
for(int i=1;i<=m;i++)
{mod*=10;}
x1=1,x2=2;
if(f(x1)==0) x1=x1;
else if(f(x1)*f(x2)<0)
{
while(x2-x1>=eps)
{
double xx=x1+(x2-x1)/2;
if(f(x1)*f(xx)<=0)
x2=xx;
else
x1=xx;
}
}
int z;
x1=x1*mod*10;
z=floor(x1);
if(m==0)
{
int z1;
z1=floor(x1);
z1=(z1+5)/10;
cout<<z1;
return 0;
}
cout<<z/(mod*10);
if(m!=0)
cout<<"."<<(z%(mod*10)+5)/10;
return 0;
}
Problem F
#include <iostream>
using namespace std;
long long a[100001];
long long r[100001];
long long ans=0;
void msort(long long s,long long t){
if(s==t) return;
long long mid=(s+t)/2;
msort(s,mid);
msort(mid+1,t);
long long i=s,j=mid+1,k=s;
while(i<=mid && j<=t){
if(a[i]<=a[j]){
r[k]=a[i];k++;i++;
}
else{
r[k]=a[j];k++;j++;
ans+=mid-i+1;
}
}
while(i<=mid) {
r[k]=a[i];k++;i++;
}
while(j<=t){
r[k]=a[j];k++;j++;
}
for(i=s;i<=t;i++) a[i]=r[i];
}
int main(int argc,char* argv[])
{
long long n,i;
cin>>n;
for(i=0;i<n;i++) cin>>a[i];
msort(0,n-1);
cout<<ans<<endl;
return 0;
}
Problem G
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 100005;
int n, m;
int f[N];
bool check(double mid)
{
int cnt = 0;
for (int i = 0; i < n; ++ i )
{
cnt += f[i] / mid;
}
return cnt >= m;
}
int main()
{
cin >> n >> m;
for (int i = 0; i < n; ++ i ) cin >> f[i];
double left = 0, right = 1e9;
while (right - left > 1e-4)
{
double mid = (left + right) / 2;
if (check(mid)) left = mid;
else right = mid;
}
printf("%.2lf", right);
return 0;
}
本文档探讨了五个不同难度级别的编程问题:一个涉及数组操作(Problem A),一个处理数值范围查找(Problem B),一个使用数学公式求解(Problem C),一个涉及大数运算(Problem D),以及一个精度要求高的数值计算(Problem E)。这些问题涵盖了数组处理、数值分析和算法优化等关键知识点。
482

被折叠的 条评论
为什么被折叠?



