T1

错因:未熟练运用sort函数; 思路:从大到小加一起,是否超过x||y; 代码:

#include <bits/stdc++.h>
using namespace std;
long long a[200010];
long long b[200010];
int main(){
	freopen("eat.in","r",stdin);
	freopen("eat.out","w",stdout);
	long long n,x,y,suma=0,sumb=0;
	cin>>n>>x>>y;
	for(int i=1;i<=n;i++)cin>>a[i];
	for(int i=1;i<=n;i++)cin>>b[i];
	sort(a+1,a+n+1);
	sort(b+1,b+n+1);
	for(int i=n;i>=1;i--){
		suma=suma+a[i];
		sumb=sumb+b[i];
		if(suma>x){
			cout<<n-i+1;
			return 0;
		}
		if(sumb>y){
			cout<<n-i+1;
			return 0;
		}
	}
	cout<<n;
	return 0;
}

T2

无思路 思路:从小到大试,到第n个停;

#include <bits/stdc++.h>
using namespace std;
long long a[100]={0,1,11,111,1111,11111,111111,1111111,11111111,111111111,1111111111,11111111111,111111111111};
int main(){
	freopen("three.in","r",stdin);
	freopen("three.out","w",stdout);
	int n;
	cin>>n;
	for(int i=1;i<=13;i++){
		for(int j=1;j<=i;j++){
			for(int g=1;g<=j;g++){
				n--;
				if(n==0)cout<<a[i]+a[j]+a[g];
			}
		}
	}
	return 0;
}

T3

思路:统计所有位置; 代码:

#include <bits/stdc++.h>
using namespace std;
long long cnt[10][10]={0};
int main(){
	freopen("number.in","r",stdin);
	freopen("number.out","w",stdout);
	int n,sum=0;
	cin>>n;
	for(int i=1;i<=n;i++){
		int x=i;
		while(x>=10)x=x/10;
		cnt[x][i%10]++;
	}
	for(int i=1;i<10;i++){
		for(int j=1;j<10;j++){
			sum=sum+cnt[i][j]*cnt[j][i];
		}
	}
	cout<<sum;
	return 0;
}