博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Educational Codeforces Round 57题解
阅读量:7191 次
发布时间:2019-06-29

本文共 2618 字,大约阅读时间需要 8 分钟。

ZZ出题人写NTT写成ZZ了吧,全是998244353,不需要取模的东西强行取模搞得我以为答案很大想了好久(指B题)

A.Find Divisible

任意输出 \([l,r]\) 内的一组满足 \(x \mid y\)\(x, y\) ,保证有答案

我输出了 \(\lfloor \frac{r}{l} \rfloor \times l\) 输出2l也行

int main() {    int T;    in, T;    while (T--) {        int l, r;        in, l, r;         out, l, ' ', r / l * l, '\n';    }  return 0;}

B.Substring Removal

给个字符串s(字符集大小 $ > 1$)问有多少种 \([l,r]\) 满足删掉这个区间内的字符以后剩下的字符串字符集大小为 \(1\) (至少删掉一个字符,可以全部删掉)

根据 s[1]是否和s[len]相同讨论,可以删掉 以1为左端点 或者是 以len为右端点的区间,如果相同还可以删掉中间一段区间

char s[MAXN << 1];int main() {    int len;    in, len, s+1;    int p = 1;    while (p < len && s[p + 1] == s[p]) ++p;    int p1 = len;        while (p1 > 1 && s[p1 - 1] == s[p1]) --p1;    ll ans;    ans = p + (len - p1 + 1) + 1;    if (s[1] == s[len]) { //[p+1,p1-1]        ans += p * 1ll * (len-p1+1) % mod;        ans %= mod;    }    out, ans;  return 0;}

C.Polygon for the Angle

给出一个整数角度 \([1,180)\) ,问至少正几边形的三个顶点之间的角可以是这个角度

发现答案最多是360(当时怕想错就枚举到998244353然后break的)而且不会有无解的情况

正x边形三个顶点之间最大的角度就是他的内角 \(\frac{(x-2)180}{x}\) 如果比他大那么正x边形不符合条件(样例第四个不输出90就是因为这个),最小的角是一条边对应圆弧的圆周角也就是 \(\frac{180}{x}\)(注意这里可能会有小数)

我因为没注意到小数然后被除法安排了五十分钟,转成乘法过了,真是恶心

int main() {    int T;    in, T;    while (T--) { //(n - 2) 180 / n | ang        int ang, Min = inft;        in, ang;        ang <<= 1;        lop(i, 3, 998244353) {            if (360 % i) continue;            if (360 * 1ll * (i-2) >= ang * 1ll * i && ang * 1ll * i % 360 == 0) {                Min = i;                break;            }        }        out, Min, '\n';    }     return 0;}

D.Easy Problem

给一个字符串 \(s\) 和删除每一位的代价 \(a\),求最少的代价使得s中不含子序列 "hard"

dp[i][0/1/2/3]表示使前i位不含h/ha/har/hard子序列的最小代价

ll dp[MAXN][4];int len, a[MAXN], MP[256]; char s[MAXN];// no h/no ha/no har/no hardint main() {    in, len, s+1;    lop1(i,len) in, a[i];    lop(i,'a','z') MP[i] = -1;    MP['h'] = 0, MP['a'] = 1, MP['r'] = 2, MP['d'] = 3;    lop1(i,len) {        lop0(j,4) dp[i][j] = dp[i-1][j];        if (MP[s[i]] == -1) continue;        dp[i][MP[s[i]]] += a[i];        if (MP[s[i]]) chmin(dp[i][MP[s[i]]], dp[i-1][MP[s[i]]-1]);    }    out, dp[len][3];  return 0;}

去偷了一个写的好看点的代码,状态跟我的反着

int n, a[MAXN];LL ans, dp[4];char s[MAXN];int main() {    read(n);    scanf("%s", s+1);    memset(dp, 127, sizeof(127)), dp[0] = 0;    rep(i, 1, n) {        read(a[i]);        if(s[i] == 'd') dp[3] += a[i];        if(s[i] == 'r') chkmin(dp[3], dp[2]), dp[2] += a[i];        if(s[i] == 'a') chkmin(dp[2], dp[1]), dp[1] += a[i];        if(s[i] == 'h') chkmin(dp[1], dp[0]), dp[0] += a[i];    }    ans = min(min(dp[0], dp[1]), min(dp[2], dp[3]));    cout<

骗访问量

转载于:https://www.cnblogs.com/storz/p/10198953.html

你可能感兴趣的文章
第9章 保护Web应用
查看>>
IO多路复用之select
查看>>
餐厅定位:编写一个程序,访问用户有多少人用餐。如果超过8个,就打印一条消息指出没有空桌,否则指出有空桌。...
查看>>
partition-list
查看>>
4.2. 入门案例
查看>>
Laravel资源理由器跟隐式控制的对比及是怎样的吧?- Route::resource vs Route::controller...
查看>>
mysql数据库分区功能及实例详解
查看>>
点击 小眼睛,和 i,
查看>>
OVN 问题小记
查看>>
mysql
查看>>
从hive将数据导出到mysql(转)
查看>>
写给来到这里的每一位
查看>>
dialog 中装listview并让每一个item分隔悬空,并具有radiobutton的效果
查看>>
ASP.NET中插入FLASH代码
查看>>
通过jquery 获取文本框的聚焦和失焦方法
查看>>
7 JavaScript Basics Many Developers Aren't Using (Properly)【转】
查看>>
Eclipse之JSP页面的使用
查看>>
Python入门篇-函数、参数及参数解构
查看>>
Android上获取本机安装的应用程序
查看>>
Android 手势识别
查看>>