AtCoder Beginner Contest 353
A - Buildings
求第一个
模拟。
点击查看代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,h[103];
signed main(){
cin>>n;cin>>h[1];
for(int i=2;i<=n;i++){
cin>>h[i];
if(h[i]>h[1]) cout<<i,exit(0);
}
cout<<"-1";
return 0;
}
B - AtCoder Amusement Park
有若干容量为
模拟。
点击查看代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,k,a[103],cnt,v;
signed main(){
cin>>n>>k;
for(int i=1;i<=n;i++){
cin>>a[i];
if(v+a[i]<=k) v+=a[i];
else v=a[i],cnt++;
}
cout<<cnt+1;
return 0;
}
C - Sigma Problem
令
求
这个数据范围是关键。
先考虑排序,然后对于每个
点击查看代码
#include<bits/stdc++.h>
#define int long long
const int mod=1e8;
using namespace std;
int n,a[300003],ans,pre[300003];
signed main(){
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
a[n+1]=mod;
sort(a+1,a+n+1);
for(int i=1;i<=n;i++) pre[i]=pre[i-1]+a[i];
int pos=n;
for(int i=1;i<n;i++){
while(pos>i&&a[i]+a[pos]>=mod) pos--;
if(pos<i) pos=i;
ans+=a[i]*(n-i)+pre[n]-pre[i]-(n-pos)*mod;
}
cout<<ans;
return 0;
}
D - Another Sigma Problem
令
求
考虑一个数的贡献,就是后面的数的
点击查看代码
#include<bits/stdc++.h>
#define int long long
const int mod=998244353;
using namespace std;
int n,a[300003],ans,ton[300004],pre[300004];
int qpow(int a,int b){
int res=1;
for(;b;b>>=1,a=a*a%mod) if(b&1) res=res*a%mod;
return res;
}
signed main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
pre[i]=(pre[i-1]+a[i])%mod;
ton[i]=(ton[i-1]+qpow(10,(int)(log10l(a[i])+1))%mod)%mod;
}
for(int i=1;i<=n;i++){
ans=(ans+(pre[n]-pre[i]+(ton[n]-ton[i])*a[i]%mod+mod)%mod)%mod;
}
cout<<ans;
return 0;
}
E - Yet Another Sigma Problem
令
求
把字符串放到 trie 树上,插入时记末端节点
计算答案时可以分开计算,对于每个字符位置
不要弄错下标!时间复杂度
点击查看代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,ans;
char s[300003];
int trie[300004][30],node,g[300004];
void insert(){
int u=0;
for(int i=0;s[i];i++){
if(!trie[u][s[i]-'a'])
trie[u][s[i]-'a']=++node;
u=trie[u][s[i]-'a'];
}
g[u]++;
}
void dfs(int u){
int cnt=0,f=0;
for(int i=0;i<26;i++){
if(trie[u][i]){
dfs(trie[u][i]);
g[u]+=g[trie[u][i]];
}
}
}
void ds(int u){
ans+=g[u]*(g[u]-1)/2;
for(int i=0;i<26;i++){
int v=trie[u][i];
if(v){
ds(v);
}
}
}
signed main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>s;
insert();
}
for(int i=0;i<26;i++){
if(trie[0][i]) dfs(trie[0][i]);
}
for(int i=0;i<26;i++){
if(trie[0][i]) ds(trie[0][i]);
}
cout<<ans;
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】