A题:
给一个数,把这个数分解为三个不是3的倍数
有很多解,可以随意构造
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n;cin>>n;
if((n-2)%3==0) cout<<"1 2 "<<n-3;
else cout<<"1 1 "<<n-2;
//cout<<a<<" "<<b<<" "<<c;
return 0;
}
B题:
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n;scanf("%d",&n);
int s=0;
for(int i=0;i<n;i++)
{
int a,b;cin>>a>>b;
s=max(s,a+b);
}
printf("%d\n",s);
return 0;
}
C题:
一直不是超时就是wa的题目。。。坑。。最后wls抬了一手,看懂之后打表九百多ms擦边过
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int INF = 0x3f3f3f3f;
const int MAXN =1.5e7 + 10;
int pi[MAXN], a[MAXN];
int gcd(int a, int b)
{
return b==0?a:gcd(b,a%b);
}
int main()
{
int n, dis = 0; scanf("%d",&n);
for (int i=0; i<n; ++i)
{
int vis;
scanf("%d", &vis);
a[vis]++;
if (dis==0)
dis = vis;
else
dis = gcd(dis,vis);
}
int ans = n;
for (int i=dis + 1;i<MAXN; ++i)
if (pi[i]==0)
{
int cnt = 0;
for (int j = i; j < MAXN; j += i)
pi[j] = 1, cnt += a[j];
ans = min(ans,n-cnt);
}
if (ans < n) printf("%d",ans);
else printf("-1");
return 0;
}