1.
代码
P2249 【深基13.例1】查找 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
#include <iostream>
#include<stdio.h>
#include<algorithm>
#include<string.h>
using namespace std;
int a[1000000];
int main()
{
int n, m,x,ans;
scanf("%d %d", &n, &m);
for (int i = 0; i < n; i++)
{
scanf("%d", &a[i]);
}
while (m--)
{
scanf("%d", &x);
ans = lower_bound(a, a + n, x) - a;
if(x!=a[ans]) printf("-1 ");
else printf("%d ", ans+1);
}
}
2
P1102 A-B 数对 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
#include <iostream> #include<stdio.h> #include<algorithm> #include<string.h> using namespace std; long long int a[200010]; int main() { long long int n,c,time,ans=0; scanf("%lld %lld",&n,&c); for(int i=0;i<n;i++)scanf("%lld",&a[i]); sort(a,a+n); for(int i=0;i<n;i++) { ans+=((upper_bound(a,a+n,a[i]+c)-a)-(lower_bound(a,a+n,a[i]+c)-a)); } printf("%lld",ans); }
切木材
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int MAXN=1e5+10;
LL n,a[MAXN],k,l=1,r;
bool p(int x){
int ans=0;
for(int i=0;i<n;i++){
ans=ans+a[i]/x;
}
if(ans>=k)return 1;
else return 0;
}
int main(){
scanf("%lld%lld",&n,&k);
for(int i=0;i<n;i++){
scanf("%lld",&a[i]);
r+=a[i];
}
r/=k;
while(l<=r){
int mid=(l+r)>>1;
if(p(mid)){
l=mid+1;
}
else{
r=mid-1;
}
}
printf("%lld",r);
return 0;
}
3.一元三次方程求解
P1024 [NOIP2001 提高组] 一元三次方程求解 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
#include<bits/stdc++.h>
using namespace std;
#define eps 1e-4
double a,b,c,d;
double f(double x)
{
return a*x*x*x+b*x*x+c*x+d;
}
int main()
{
scanf("%lf %lf %lf %lf",&a,&b,&c,&d);
for(int i=-100;i<=100;i++)
{
double left=i,right=i+1,mid;
if(fabs(f(left))<eps)printf("%.2lf ",left);
else if(fabs(f(right))<eps)continue; //不加此句会错两个案例,我的失分点
else if(f(left)*f(right)<0)
{
while(right-left>eps)
{
mid=(left+right)/2;
if(f(mid)*f(left)>0)left=mid;
else right=mid;
}
printf("%.2lf ",mid);
}
}
}