====== Codeforces Round #643 (Div. 2) ====== ===== A. Sequence with Digits ===== 大致题意:$a_{n+1}=a_n+\min \{D_{a_n}\}+max\{D_{a_n}\}$,$D_n$是n的各位数字组成的集合。求$a_n$。 盲猜多求几个就会带有数字0 代码: #include #include #include #include using namespace std; int main() { int T; scanf("%d",&T); auto f=[](long long now){ vector vec; while (now!=0) { vec.push_back(now%10); now/=10; } return vec; }; auto minn=[&](long long now) { auto &&vec=f(now); return *min_element(vec.begin(),vec.end()); }; auto maxn=[&](long long now) { auto &&vec=f(now); return *max_element(vec.begin(),vec.end()); }; while (T--) { long long a1,k; scanf("%lld%lld",&a1,&k); long long ans=a1; for (int i=2;i<=k&&minn(ans);i++) ans=ans+minn(ans)*maxn(ans); printf("%lld\n",ans); } return 0; } ===== B. Young Explorers ===== 排序,贪心即可 代码: #include #include #include #include #include int a[200001]; using namespace std; int main() { int T; scanf("%d",&T); while (T--) { int n; scanf("%d",&n); for (int i=1;i<=n;i++) scanf("%d",&a[i]); sort(a+1,a+n+1,[](int a,int b){ return a>b; }); stack s; for (int i=1;i<=n;i++) s.push(a[i]); int ans=0; while (s.size()>0) { int top=s.top(); int i; for (i=1;i<=top&&s.size()>0;i++) { s.pop(); if (i!=top&&s.size()>0) top=max(top,s.top()); } if (i==top+1) ans++; } printf("%d\n",ans); } } ===== C. Count Triangles ===== 题意:求集合$\{(x,y,z)|a\le x\le b\le y\le c\le z\le d且x+y #include #include #include using namespace std; int main() { long long a,b,c,d; long long ans=0; scanf("%lld%lld%lld%lld",&a,&b,&c,&d); for (long long i=a;i<=b;i++) { long long mid=c; if (d-i+1<=c) { mid=d-i; ans+=(long long)(c-max((d-i+1),b)+1)*(d-c+1); if (d-i ===== D. Game With Array ===== 构造题,前面n-1个全是1 代码: #include int n,m; int main() { scanf("%d%d",&n,&m); if (m<2*n) { printf("no"); return 0; } printf("yes\n"); for (int i=1;i