说实话,当我做到D题,你跟我讲这是div3,我是不信的,一度以为进错了。啊,说好的1600分就不计rating的div3,D题评价1800,E2100,F2300.嗯,我为自己的菜找到了借口。
总结:
A很简单,B题原本想用char的二维数组,但是sort起来很不方便,strlen也不方便,后来看答案用vertor存string,可,学到了。C题我写的时间比B要短,嗯 B的字符串处理太生了,开个桶就行。D题就十分骂娘了,原本也是开桶记录,map–>TLE unordered_map -->TLE unordered_map+scanf -->MLE,打扰了,看标称,去掉桶,sort+binary_search,算你狠。
E题细节好多啊,写了一个小时,还是每次错了看看错在哪一个,改了四次吧应该才过。
F真的不会,这个DP我得继续研究,直接上标称了,加上注释,了。
#include <iostream>
using namespace std;
int f[105],a[105];
int main()
{
int n,k; cin>>n>>k;
int cou=0;
for(int i=1;i<=n;i++){
cin>>a[i];
if(!f[a[i]]) f[a[i]]=i,cou++;
}
int now=0;
if(cou>=k){
cout<<"YES"<<endl;
for(int i=1;i<=100;i++){
if(f[a[i]]){
cout<<f[a[i]]<<" ";
f[a[i]]=0;
now++;
}
if(now==k) break;
}
}
else cout<<"NO"<<endl;
return 0;
}
B
#include <iostream>
#include <algorithm>
#include <string.h>
using namespace std;
bool cmp(string x,string y){
return x.size()<y.size();
}
int main()
{
int n; cin>>n;
vector<string>a(n);
for(int i=0;i<n;i++) cin>>a[i];
sort(a.begin(),a.end(),cmp);
for(int i=0;i<n-1;i++){
if (a[i + 1].find(a[i]) == a[i+1].npos) {
cout << "NO"<<endl;
return 0;
}
}
cout<<"YES"<<endl;
for(int i=0;i<n;i++)
cout<<a[i]<<endl;
return 0;
}
C
#include <iostream>
#include <map>
using namespace std;
const int N=2e5+10;
struct node{
int index,pos;
node(){
index=0;pos=0;
}
};
map<int,node>flag;
int a[N];
int main()
{
int T; cin>>T;
int f=0;
for(int cas=1;cas<=T;cas++){
int