
欢迎各位讨论,可以私信或评论其他的做法,欢迎
上一篇:ABC250 下面正式题解: A题:题意:给定字符串(长度1-3),将其重复输出直到输出6个字符,求输出。
难度:入门
近几次最简单的A题,看代码:
//AT251A 22-05-14/16 #includeB题:using namespace std; int main() { ios::sync_with_stdio(0); cin.tie(0); string s,ans; cin>>s; while (ans.length()<6) ans+=s; cout<
难度:入门
模拟题,主要注意判重,其他枚举+模拟,代码:
//AT251AB 22-05-14/16 #includeC题:using namespace std; bool vis[1000001]; int a[305]; int main() { ios::sync_with_stdio(0); cin.tie(0); int n,w,s=0; cin>>n>>w; for (int i=1;i<=n;i++) cin>>a[i]; int ans=0; for (int i=1;i<=n;i++) { if (a[i]<=w && vis[a[i]]==0) vis[a[i]]=1,ans++; for (int j=i+1;j<=n;j++) { //下面模拟去重 if (a[i]+a[j]<=w && vis[a[i]+a[j]]==0) vis[a[i]+a[j]]=1,ans++; for (int k=j+1;k<=n;k++) { if (a[i]+a[j]+a[k]<=w && vis[a[i]+a[j]+a[k]]==0) vis[a[i]+a[j]+a[k]]=1,ans++; } } } cout<
难度:普及-
这题记得使用set来标记,其他也是模拟,难度不高。
关于set,大家可以参考此博客:https://blog.csdn.net/sevenjoin/article/details/81908754
代码:
//AT251C 22-05-14/16 #includeD题:using namespace std; int n,t[100001]; string s; int main() { ios::sync_with_stdio(0); cin.tie(0); cin>>n; set se; int ans=0,mx=-2147483648; for (int i=1;i<=n;i++) { int x; cin>>s>>x; if (se.count(s)) continue; se.insert(s); if (x>mx) mx=x,ans=i; } cout<
难度:普及 / 提高-
题目简述:给定一数 W,求出一个数列,使得其中的1-3个数的和,恰为1-N的和。
先看数据范围: ,
这说明,1,2,3,4,5……这种方法肯定不行。(要不然不就太简单了嘛)
不如这样,我们先忽略 这个条件,我想基本上大家都是能想到二进制吧。
因为每个数的二进制表示法就代表其选择哪些元素相加。
那么现在的问题在于,必须最多只能有3个元素相加,
那么我们是不是可以不使用二进制了呢,使用其他进制?
所以我们再看数据范围:
,所以用100进制表示因此就是:1, 2, 3, 4, 5, 6......, 99, 100, 200, 300, 400......, 9900, 10000, 20000, 30000......, 1000000
代码(超短):
//AT251D 22-05-14/16 #includeusing namespace std; int main() { ios::sync_with_stdio(0); cin.tie(0); int n; cin>>n; cout<<"298"< ==================稍=后=更=新=====================