【AtCoder】CODE FESTIVAL 2016 qual B

CODE FESTIVAL 2016 qual B

A - Signboard

……

#include <bits/stdc++.h>
#define fi first
#define se second
#define pii pair<int,int>
#define mp make_pair
#define pb push_back
#define space putchar(' ')
#define enter putchar('\n')
#define eps 1e-10
#define MAXN 100005
//#define ivorysi
using namespace std;
typedef long long int64;
typedef unsigned int u32;
typedef double db;
template<class T>
void read(T &res) {
    res = 0;T f = 1;char c = getchar();
    while(c < '0' || c > '9') {
    if(c == '-') f = -1;
       c = getchar();
    }
    while(c >= '0' && c <= '9') {
        res = res * 10 +c - '0';
        c = getchar();
    }
    res *= f;
}
template<class T>
void out(T x) {
    if(x < 0) {x = -x;putchar('-');}
    if(x >= 10) {
        out(x / 10);
    }
    putchar('0' + x % 10);
}
string s = "CODEFESTIVAL2016",t;
void Solve() {
    cin >> t;
    int ans = 0;
    for(int i = 0 ; i < s.length() ; ++i) {
        if(s[i] != t[i]) ++ans;
    }
    out(ans);enter;
}
int main() {
#ifdef ivorysi
    freopen("f1.in","r",stdin);
#endif
    Solve();
    return 0;
}

B - Qualification simulator

……

#include <bits/stdc++.h>
#define fi first
#define se second
#define pii pair<int,int>
#define mp make_pair
#define pb push_back
#define space putchar(' ')
#define enter putchar('\n')
#define eps 1e-10
#define MAXN 100005
//#define ivorysi
using namespace std;
typedef long long int64;
typedef unsigned int u32;
typedef double db;
template<class T>
void read(T &res) {
    res = 0;T f = 1;char c = getchar();
    while(c < '0' || c > '9') {
    if(c == '-') f = -1;
       c = getchar();
    }
    while(c >= '0' && c <= '9') {
        res = res * 10 +c - '0';
        c = getchar();
    }
    res *= f;
}
template<class T>
void out(T x) {
    if(x < 0) {x = -x;putchar('-');}
    if(x >= 10) {
        out(x / 10);
    }
    putchar('0' + x % 10);
}
int N,A,B;
char s[MAXN];
void Solve() {
    read(N);read(A);read(B);
    scanf("%s",s + 1);
    int r = 1,all = 0;
    for(int i = 1 ; i <= N ; ++i) {
        if(s[i] == 'a') {
            if(all < A + B) {puts("Yes");++all;}
            else puts("No");
        }
        else if(s[i] == 'b') {
            if(all < A + B && r <= B) {puts("Yes");++all;++r;}
            else puts("No");
        }
        else {
            puts("No");
        }
    }
}
int main() {
#ifdef ivorysi
    freopen("f1.in","r",stdin);
#endif
    Solve();
    return 0;
}

C - Gr-idian MST

找到p和q中还没用的最小的一个

如果用的是p,q已经用了k个,这个p值能用的就是\(H - k + 1\)这么多

用的是q同理

#include <bits/stdc++.h>
#define fi first
#define se second
#define pii pair<int,int>
#define mp make_pair
#define pb push_back
#define space putchar(' ')
#define enter putchar('\n')
#define eps 1e-10
#define MAXN 100005
//#define ivorysi
using namespace std;
typedef long long int64;
typedef unsigned int u32;
typedef double db;
template<class T>
void read(T &res) {
    res = 0;T f = 1;char c = getchar();
    while(c < '0' || c > '9') {
    if(c == '-') f = -1;
       c = getchar();
    }
    while(c >= '0' && c <= '9') {
        res = res * 10 +c - '0';
        c = getchar();
    }
    res *= f;
}
template<class T>
void out(T x) {
    if(x < 0) {x = -x;putchar('-');}
    if(x >= 10) {
        out(x / 10);
    }
    putchar('0' + x % 10);
}
int W,H;
int64 p[MAXN],q[MAXN],ans;
int id[2][MAXN],c[2];
void Solve() {
    read(W);read(H);
    for(int i = 0 ; i < W ; ++i) {
        id[0][i] = i;
        read(p[i]);
    }
    for(int i = 0 ; i < H ; ++i) {
        id[1][i] = i;
        read(q[i]);
    }
    sort(id[0],id[0] + W,[](int a,int b){return p[a] < p[b];});
    sort(id[1],id[1] + H,[](int a,int b){return q[a] < q[b];});
    int p1 = 0,p2 = 0;
    for(int i = 1 ; i <= W + H ; ++i) {
        if(p2 >= H || (p1 < W && p[id[0][p1]] < q[id[1][p2]])) {
            ans += 1LL * (H - c[1] + 1) * p[id[0][p1]];
            ++p1;++c[0];
        }
        else {
            ans += 1LL * (W - c[0] + 1) * q[id[1][p2]];
            ++p2;++c[1];
        }
    }
    out(ans);enter;
}
int main() {
#ifdef ivorysi
    freopen("f1.in","r",stdin);
#endif
    Solve();
    return 0;
}

D - Greedy customers

考虑到我们希望每个人用尽量小的东西填满它,且这个东西不能和之前出现过的大小相等

我们先用1把第一个人变成1,然后后面如果出现一个2,则我们扔的东西都要大于2

如果出现大于2的数,我们总有办法使这个数买了最多\(\lfloor \frac{x}{3} \rfloor\)的状态下

如果出现了3之后同理,如此贪心下去即可

#include <bits/stdc++.h>
#define fi first
#define se second
#define pii pair<int,int>
#define mp make_pair
#define pb push_back
#define space putchar(' ')
#define enter putchar('\n')
#define eps 1e-10
#define MAXN 100005
//#define ivorysi
using namespace std;
typedef long long int64;
typedef unsigned int u32;
typedef double db;
template<class T>
void read(T &res) {
    res = 0;T f = 1;char c = getchar();
    while(c < '0' || c > '9') {
    if(c == '-') f = -1;
       c = getchar();
    }
    while(c >= '0' && c <= '9') {
        res = res * 10 +c - '0';
        c = getchar();
    }
    res *= f;
}
template<class T>
void out(T x) {
    if(x < 0) {x = -x;putchar('-');}
    if(x >= 10) {
        out(x / 10);
    }
    putchar('0' + x % 10);
}
int N,a[MAXN];
void Solve() {
    read(N);
    for(int i = 1 ; i <= N ; ++i) {
        read(a[i]);
    }
    int pre = 1;
    int64 ans = a[1] - 1;a[1] = 1;
    for(int i = 2 ; i <= N ; ++i) {
        if(a[i] == pre + 1) pre++;
        else {
            ans += (a[i] - 1) / (pre + 1);
        }
    }
    out(ans);enter;
}
int main() {
#ifdef ivorysi
    freopen("f1.in","r",stdin);
#endif
    Solve();
    return 0;
}

E - Lexicographical disorder

这个我分析了一下,压缩后的树高应该是根号级别的,于是愉快的开始卡常,最后就剩三个点死活也过不去了

翻了一下题解,只要对于trie上每个点统计在某个字母小于另一个字母的情况下,某个点的儿子中的一个儿子是否小于另一个儿子

因为这种关系只有\(26 * 26\)所以存的下而且很快就过了。。

#include <bits/stdc++.h>
#define fi first
#define se second
#define pii pair<int,int>
#define mp make_pair
#define pb push_back
#define space putchar(' ')
#define enter putchar('\n')
#define eps 1e-10
#define MAXN 100005
//#define ivorysi
using namespace std;
typedef long long int64;
typedef unsigned int u32;
typedef double db;
template<class T>
void read(T &res) {
    res = 0;T f = 1;char c = getchar();
    while(c < '0' || c > '9') {
    if(c == '-') f = -1;
       c = getchar();
    }
    while(c >= '0' && c <= '9') {
        res = res * 10 +c - '0';
        c = getchar();
    }
    res *= f;
}
template<class T>
void out(T x) {
    if(x < 0) {x = -x;putchar('-');}
    if(x >= 10) {
        out(x / 10);
    }
    putchar('0' + x % 10);
}
struct node {
    int to;string s;
};
vector<node> to[MAXN * 4];
int N,Q,Ncnt;
int ed[MAXN * 4],ans[MAXN],pri[30],siz[MAXN * 4],pla[MAXN];
int dp[MAXN * 4][26][26];
string str[MAXN],order;
void insert(int u,int id,int pos) {
    if(pos == str[id].length()) {ed[u] = id;pla[id] = u;return;}
    for(auto &t : to[u]) {
        if(t.s[0] == str[id][pos]) {
            int l = -1;
            while(l + 1 < str[id].length() - pos && l + 1 < t.s.length()) {
                if(str[id][pos + l + 1] == t.s[l + 1]) ++l;
                else break;
            }
            if(l + 1 == t.s.length()) {
                insert(t.to,id,pos + t.s.length());
                return;
            }
            int nw = ++Ncnt;
            to[nw].pb((node){t.to,t.s.substr(l + 1)});
            t.to = nw;t.s = t.s.substr(0,l + 1);
            if(l + 1 == str[id].length() - pos) {
                ed[nw] = id;pla[id] = nw;
            }
            else {
                to[nw].pb((node){++Ncnt,str[id].substr(pos + l + 1)});
                ed[Ncnt] = id;
                pla[id] = Ncnt;
            }
            return;
        }
    }
    to[u].pb((node){++Ncnt,str[id].substr(pos)});
    ed[Ncnt] = id;pla[id] = Ncnt;return;
}
void pre_Process(int u,int all) {
    if(ed[u]) {ans[ed[u]] = all;siz[u]++;++all;}
    for(auto t : to[u]) {
        pre_Process(t.to,all);
        siz[u] += siz[t.to];
    }

}
void Calc(int u) {
    for(auto t : to[u]) {
        memcpy(dp[t.to],dp[u],sizeof(dp[t.to]));
        for(auto k : to[u]) {
            if(t.to == k.to) continue;
            dp[t.to][k.s[0] - 'a'][t.s[0] - 'a'] += siz[k.to];
        }
    }
    for(auto t : to[u]) {
        Calc(t.to);
    }
}
void Solve() {
    read(N);
    Ncnt = 1;
    for(int i = 1 ; i <= N ; ++i) {
        cin >> str[i];
        insert(1,i,0);
    }
    pre_Process(1,0);
    Calc(1);
    read(Q);
    int k;
    for(int i = 1 ; i <= Q ; ++i) {
        read(k);cin >> order;
        int res = 0;
        for(int j = 0 ; j < 26 ; ++j) {
            for(int t = j + 1 ; t < 26 ; ++t) {
                res += dp[pla[k]][order[j] - 'a'][order[t] - 'a'];
            }
        }
        out(res + ans[k] + 1);enter;
    }
}
int main() {
#ifdef ivorysi
    freopen("f1.in","r",stdin);
#endif
    Solve();
    return 0;
}

转载于:https://www.cnblogs.com/ivorysi/p/10885883.html

以下是对提供的参考资料的总结,按照要求结构化多个要点分条输出: 4G/5G无线网络优化与网规案例分析: NSA站点下终端掉4G问题:部分用户反馈NSA终端频繁掉4G,主要因终端主动发起SCGfail导致。分析显示,在信号较好的环境下,终端可能因节能、过热保护等原因主动释放连接。解决方案建议终端侧进行分析处理,尝试关闭节电开关等。 RSSI算法识别天馈遮挡:通过计算RSSI平均值及差值识别天馈遮挡,差值大于3dB则认定有遮挡。不同设备分组规则不同,如64T和32T。此方法可有效帮助现场人员识别因环境变化引起的网络问题。 5G 160M组网小区CA不生效:某5G站点开启100M+60M CA功能后,测试发现UE无法正常使用CA功能。问题原因在于CA频点集标识配置错误,修正后测试正常。 5G网络优化与策略: CCE映射方式优化:针对诺基亚站点覆盖农村区域,通过优化CCE资源映射方式(交织、非交织),提升RRC连接建立成功率和无线接通率。非交织方式相比交织方式有显著提升。 5G AAU两扇区组网:与三扇区组网相比,AAU两扇区组网在RSRP、SINR、下载速率和上传速率上表现不同,需根据具体场景选择适合的组网方式。 5G语音解决方案:包括沿用4G语音解决方案、EPS Fallback方案和VoNR方案。不同方案适用于不同的5G组网策略,如NSA和SA,并影响语音连续性和网络覆盖。 4G网络优化与资源利用: 4G室分设备利旧:面对4G网络投资压减与资源需求矛盾,提出利旧多维度调优策略,包括资源整合、统筹调配既有资源,以满足新增需求和提质增效。 宏站RRU设备1托N射灯:针对5G深度覆盖需求,研究使用宏站AAU结合1托N射灯方案,快速便捷地开通5G站点,提升深度覆盖能力。 基站与流程管理: 爱立信LTE基站邻区添加流程:未提供具体内容,但通常涉及邻区规划、参数配置、测试验证等步骤,以确保基站间顺畅切换和覆盖连续性。 网络规划与策略: 新高铁跨海大桥覆盖方案试点:虽未提供详细内容,但可推测涉及高铁跨海大桥区域的4G/5G网络覆盖规划,需考虑信号穿透、移动性管理、网络容量等因素。 总结: 提供的参考资料涵盖了4G/5G无线网络优化、网规案例分析、网络优化策略、资源利用、基站管理等多个方面。 通过具体案例分析,展示了无线网络优化中的常见问题及解决方案,如NSA终端掉4G、RSSI识别天馈遮挡、CA不生效等。 强调了5G网络优化与策略的重要性,包括CCE映射方式优化、5G语音解决方案、AAU扇区组网选择等。 提出了4G网络优化与资源利用的策略,如室分设备利旧、宏站RRU设备1托N射灯等。 基站与流程管理方面,提到了爱立信LTE基站邻区添加流程,但未给出具体细节。 新高铁跨海大桥覆盖方案试点展示了特殊场景下的网络规划需求。
芯片的过程质量(process qual)是指在芯片生产过程中,确保芯片制造质量的一系列措施和评估。芯片生产过程需要通过严格的工艺控制和可靠性测试,以确保最终产品的性能和品质符合设计要求。 首先,芯片的过程质量包括工艺控制。在芯片制造过程中,各个工艺步骤都要进行严格的控制和监测。这包括成品检测、工艺参数的控制和调整,以及过程监控等措施。通过这些控制措施,可以尽量减少工艺变异,提高芯片生产的一致性和稳定性。 其次,芯片的过程质量还涉及可靠性测试。这主要是通过各种可靠性测试手段对芯片进行验证和评估。可靠性测试包括高温老化、温度循环、可靠性加速测试等多种手段,以验证芯片在不同条件下的可靠性和稳定性。这些测试可以帮助识别潜在的制造缺陷或可靠性问题,并进行改进和优化。 最后,芯片的过程质量还需要建立完善的质量体系和控制机制。包括建立合格的供应链和材料检验,制订质量管理流程和标准,确保每一个工艺步骤的质量可控和可追溯。同时,还需要进行不断的质量监控和持续改进,以满足市场和客户对芯片性能和质量的不断提高的需求。 综上所述,芯片的过程质量是通过严格的工艺控制和可靠性测试,以及建立完善的质量体系和控制机制,来保证芯片制造过程中的质量和性能符合设计要求的一系列措施和评估。这些措施和评估可以有效提高芯片生产的一致性、可靠性和稳定性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值