题目传送门

A 小苹果

B 公路

C 一元二次方程

D 旅游巴士

T1小苹果

思路

每次可以拿走(n+2)/3个苹果,如果n%3==1那么n会被拿走

代码

#include<bits/stdc++.h>
using namespace std;
int main(){
	freopen("apple.in","r",stdin);
	freopen("apple.out","w",stdout);
	int n,i=0,c=0,l=1;
	cin>>n;
	while(n){
		i++;
		if(n%3==1&&l)c=i,l=0;
		n=n-(n+2)/3;
		
	}
	cout<<i<<' '<<c;
	return 0;	
}

T2公路

思路

每次找到比当前加油站便宜的加油站,如果没有开到终点

代码

#include<bits/stdc++.h>
using namespace std;
long long n,d,w[111111],a[111111],q=0,s=0,wz=1;
int main(){
	freopen("road.in","r",stdin);
	freopen("road.out","w",stdout);
	cin>>n>>d;
	for(long long i=1;i<n;i++)cin>>w[i];
	for(long long i=1;i<=n;i++)cin>>a[i];
	long long i=1;
	while(i<n){
		long long qs=0,us=i;
		for(long long j=i+1;j<=n;j++){
			qs+=w[j-1];
			if(a[i]>a[j]){
				us=j;
				break;
			}
//			cout<<us<<"\n";
		}
		if(us==i){
			us=n;
		}
		qs-=s;
	
		long long k=(qs+d-1)/d;
		s=(k*d)-qs;
		q=q+(k)*a[i];
		i=us;
//		cout<<q<<' '<<us<<' '<<k<<' '<<s<<' '<<i<<"\n";
	}
	cout<<q;
	return 0;	
}

错误与感想

处理不当,导致RE,以后要认真检查代码,防止类似情况发生

T3一元二次方程

思路

按题目的要求写就行了,只是要注意细节

代码

#include<bits/stdc++.h>
using namespace std;
int gcd(int a,int b){
	if(!b)return a;
	return gcd(b,a%b);	
}
int main(){
	freopen("uqe.in","r",stdin);
	freopen("uqe.out","w",stdout);
	int t,m;
	cin>>t>>m;
	while(t--){
		int a,b,c;
		
		cin>>a>>b>>c;
	
		if(a<0)a*=-1,b*=-1,c*=-1;
		int cc=b*b;
		int jj=4*a*c;
		int d=cc-jj;
		
//	return 0;
		if(d<0)cout<<"NO\n";
		else{
			if(d==0){
				int x=(-b)/(2*a);
				if((abs(b))%(2*a)==0)cout<<x<<"\n";
				else{
					int g=gcd(abs(b),(2*a));
					if((-b/g)%(2*a/g)==0)cout<<(-b/g)/(2*a/g);
					else cout<<(-b/g)<<'/'<<(2*a/g);
					cout<<"\n";
				}
			}
			else{
				if(int(sqrt(d))*int(sqrt(d))==d){
					int t=sqrt(d)-b;
					if(t==0)cout<<0<<"\n";
					else if((abs(t)%(2*a))==0)cout<<t/(2*a)<<"\n";
					else{
						int g=gcd(abs(t),(2*a));
						cout<<t/g<<'/'<<(2*a/g);
						cout<<"\n";
					}
				}
				else{
					int k, r;
					for (int i = sqrt(d); i >= 1; i--){
						if (d % (i*i) == 0){
							k = i;
							r = d / (i*i);
							break;
						}
					}
					if(b==0){
						int g=gcd(abs(k),(2*a));
						int b1=r;
						int b2=(2*a)/g;
						if(k/g%b2==0){
							if(k/g/b2!=1)cout<<k/g/b2<<'*';
						}
						else if(k/g!=1)cout<<k/g<<'*';	
						if(b1!=1)cout<<"sqrt("<<r<<')';
						if(b2!=1&&k/g%b2!=0)cout<<'/'<<(2*a)/g;
						cout<<"\n";
					}
					else{
						int g=gcd(abs(b),(2*a));
						if((2*a/g)>0){
							if((-b/g)%(2*a/g)==0)cout<<(-b/g)/(2*a/g)<<"+";
							else cout<<(-b/g)<<'/'<<(2*a/g)<<"+";
						}
						else cout<<(-b/g)<<'/'<<(2*a/g)<<"+";
						g=gcd(abs(k),(2*a));
						int b1=r;
						int b2=(2*a)/g;
						if(k/g%b2==0){
							if(k/g/b2!=1)cout<<k/g/b2<<'*';
						}
						else if(k/g!=1)cout<<k/g<<'*';
						if(b1!=1)cout<<"sqrt("<<r<<')';
						if(b2!=1&&k/g%b2!=0)cout<<'/'<<(2*a)/g;
						cout<<"\n";
					}
				}
			}
		}
	}
	return 0;	
}

错误与感想

骗分的,以后模拟题要多多思考