牛客IOI周赛23-普及组全题解

A 小L的作文

链接
水题不多说
统计字符就完了

int main(){
	char s; cin >> s;
	int ans = 0;
	string t; cin >> t;
	for(int i=1;i<=t.size();i++){
        if(t[i-1] == s) ans ++;
	}
	cout<<ans;
	return 0;
}

B 小L的多项式

链接
硬模拟
两层for,记得取模

ll a[maxn];
ll x[maxn];
int n,m;
ll ans[maxn];
int main() {
    cin >> n;
    for(int i=0;i<=n;i++) a[i] = read;
    cin >> m;
    for(int i=1;i<=m;i++) x[i] = read;
    for(int i=1;i<=m;i++){
        for(int j=0;j<=n;j++){
            ans[i] += a[j] * qPow(x[i],j);
            ans[i] %= mod;
        }
    }
    for(int i=1;i<=m;i++){
        printf("%lld",ans[i]);
        if(i != m) printf(" ");
    }
	return 0;
}

C 小L的编辑器

链接
注意,直接使用string可能会T(不是可能,是必然,因为试过了):

string a,b;
int main() {
    string s; cin >> s;
    string t; cin >> t;
    int len = s.size();
    for(int i=0;i<len;i++){
        if(t[i] == 'L') b = s[i] + b;
        else a = a + s[i];
    }
    cout<<a+b<<endl;
    return 0;
}

Ac_Code():
用双端队列模拟就行了,换一种方式而已

deque<int>que1;
deque<int>que2;
int main() {
    string s; cin >> s;
    string t; cin >> t;
    int len = s.size();
    for(int i=0;i<len;i++){
        if(t[i] == 'L') que2.push_front(s[i]);
        else que1.push_back(s[i]);
    }
    while(que1.size()){
        printf("%c",que1.front());
        que1.pop_front();
    }
    while(que2.size()){
        printf("%c",que2.front());
        que2.pop_front();
    }
	return 0;
}

D 小L的数列

链接
思路来自:UpMing!
Main_Code()

int T,dp[maxn],n,a[maxn];
int b[maxn];
int va[maxn];
int main(){
    /// cout<<sqrt(100000)<<endl;
	T=read();
	while(T--){
		n=read();
		int mx = -1;
		for(int i=1;i<=n;i++) a[i]=read(),mx = max(mx,a[i]);
		sort(a+1,a+n+1);
		memset(dp,0,sizeof dp);
		memset(b,0,sizeof b);
		memset(va,0,sizeof va);
        for(itn i=1;i<=n;i++){
            if(a[i] == 1) continue;
            int t = 0;
            for(int j=1;j*j <= a[i];j++){
                if(a[i] % j == 0){
                    int a1 = j;
                    int a2 = a[i] / j;
                    if(a1 == a2){
                        if(a1 > 1){
                            dp[a[i]] = max(dp[a[i]],b[a2] + 1);
                        }va[++t] = a2;
                    }else{
                        if(a1 > 1) dp[a[i]] = max(dp[a[i]],b[a1] + 1);
                        va[++t] = a1;
                        if(a2 > 1) dp[a[i]] = max(dp[a[i]],b[a2] + 1);
                        va[++t] = a2;
                    }
                }
            }
            for(int j=1;j<=t;j++){
                if(va[j] > 1) b[va[j]] = max(b[va[j]],dp[a[i]]);
            }
        }
   int ans =1;
   for(int i=1 ;i<=n ;i++) ans = max(ans,dp[a[i]]);
   cout<<ans<<endl;
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值