Codeforces Round #643 (Div. 2) ABD
这套题目也太顶了,强推
A-Sequence with Digits
https://codeforces.com/contest/1355/problem/A
题目大意:
给定一个初始数值n,问我们在每次都加上这个数字的数位最大值*最小值,
an+1=an+min Digit(an)⋅max Digit(an).
在经历了k次操作之后的最终结果是什么?
【注意k==1的时候不需要对n另外操作】。
input
8
1 4
487 1
487 2
487 3
487 4
487 5
487 6
487 7
output
42
487
519
528
544
564
588
628
一个细节没有考虑好,纯暴力可以wa半年
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef pair<LL,LL> PII;
const LL MAXN=2000020;
const int N=200200,M=2002;
int main()
{
cin.tie(0); cout.tie(0);ios::sync_with_stdio(false);
int T=1;
cin>>T;
while(T--)
{
LL n,k;
cin>>n>>k;
LL ans=n;
for(LL i=2;i<=k;i++)
{
string s=to_string(ans);
sort(s.begin(),s.end());
if((s[0]-'0')==0) break;
else ans+=((s[0]-'0')*(s[s.size()-1]-'0'));
}
cout<<ans<<endl;
}
return 0;
}
没想到吧,数位是0的时候就可以直接结束啦!
B-Young Explorers
https://codeforces.com/contest/1355/problem/B
题目大意:
每个人都有一个经验值a[i],每个人可以组队也可以不组队,
但前提要求是每个人要组队的话,必须要找到人数>=自己经验值的队伍
问我们能够组队的最大队伍数量是多少?
input
2
3
1 1 1
5
2 3 1 2 2
output
3
2
前几天刚在cf1400的题目上写了一个一摸一样的题目,照搬直接ac
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef pair<LL,LL> PII;
const LL MAXN=2000020;
const int N=200200,M=2002;
LL a[N],f[N];
int main()
{
cin.tie(0); cout.tie(0);ios::sync_with_stdio(false);
int T=1;
cin>>T;
while(T--)
{
LL n;
cin>>n;
for(LL i=1;i<=n;i++)
cin>>a[i];
sort(a+1,a+1+n);
//for(int i=1;i<=n;i++)
// cout<<a[i]<<" ";
//cout<<endl;
LL maxn=0;
f[0]=0;
for(LL i=1;i<=n;i++)
{
f[i]=f[i-1];
if(i>=a[i]) f[i]=max(f[i],f[i-a[i]]+1);
//cout<<f[i]<<" ";
maxn=max(maxn,f[i]);
}
//cout<<endl;
cout<<maxn<<endl;
}
return 0;
}
D-Game With Array
https://codeforces.com/contest/1355/problem/D
题目大意:
给定一个数组长度n,给定一个总和m
让我们构造这样一个数组:长度为n,总和为m;并且任意子序列都凑不出S或S-k(S让我们自己找一个数)
满足这些条件的就按要求输出,不能满足的就输出-1。
inputCopy
1 4
outputCopy
YES
4
2
inputCopy
3 4
outputCopy
NO
inputCopy
3 8
outputCopy
YES
2 1 5
4
读懂题目就赢了一大半
-
我们先特判NO的条件,发现在2的基础上,最小的数字都是2,所以直接把凑不出的数字定为1
-
同时我们可以想到:我们在数组中填数最小都为2,所以,我们可以知道加到的n-1个的总和的最大数就是m-2,n个数字的总和就是m,所以一定达不到m-1的位置
-
所以根据这个结论,我们直接填充n-1个2,再填一个剩余的数字就行。
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef pair<LL,LL> PII;
const LL MAXN=2000020;
const int N=200200,M=2002;
LL a[N];
int main()
{
cin.tie(0); cout.tie(0);ios::sync_with_stdio(false);
int T=1;
//cin>>T;
while(T--)
{
LL n,m;
cin>>n>>m;
if(m<2*n) cout<<"NO"<<endl;
else
{
cout<<"YES"<<endl;
for(LL i=1;i<=n;i++)
{
if(i!=n)
{
cout<<"2 ";
m-=2;
}
else cout<<m<<endl;
}
cout<<"1"<<endl;
}
}
return 0;
}
哎,最近的判错机制总是判歪,我有点迷啊