这个应该是第一场有英文的atcoder吧??不过题解却没有英文的。。。

从前往后慢慢做。。。

C こだわり者いろはちゃん / Iroha's Obsession

数据范围这么小,直接暴力

#include <bits/stdc++.h>
using namespace std; bool rec[10]; bool check(int num)
{
while(num)
{
if(rec[num%10]) return false;
num /= 10;
}
return true;
} int main()
{
int n,k,num;
cin >> n >> k;
for(int i = 0; i < k; ++i)
{
cin >> num;
rec[num] = true;
} while(true)
{
if(check(n))
{
cout << n << endl;
break;
}
++n;
}
return 0;
}

####D - いろはちゃんとマス目 / Iroha and a Grid
在H * W的矩阵中,左下角有一个A * B的矩阵不能走,求左上角走到右下角方法数。
建议一道题: 51nod 1486 大大走格子
这题容斥原理,比上边那个题简单。没有障碍时,总方法数是C(H+W-2,H-1)总方法数
求出来所有走过障碍处的走法, 用总的减掉就好了。
走过障碍处的方法数就是走到A*B矩阵上方一行的时候,选择向下走,就是非法的。减掉这些就好。
```
#include
using namespace std;
typedef long long LL;
const int MAXN = 100010;
const LL mod = 1e9+7;
typedef long long LL;
LL H,W,A,B;
LL fac[MAXN*2],inv[MAXN*2];

LL modPow(LL a, LL b)

{

LL ret = 1;

while(b)

{

if(b&1) ret = reta%mod;

a = a
a%mod;

b >>= 1;

}

return ret;

}

void init()

{

fac[0] = 1;

inv[0] = 1;

for(LL i = 1; i <= H+W; ++i)

fac[i] = fac[i-1]i%mod;

inv[H+W] = modPow(fac[H+W],mod-2);

for(LL i = H+W-1; i >= 1; --i)

inv[i] = (inv[i+1]
(i+1))%mod;

}

LL C(LL n, LL m)

{

LL ret = (fac[n]inv[m]%mod)inv[n-m]%mod;

return ret;

}

int main()

{

cin >> H >> W >> A >> B;

init();

LL res = C(H+W-2,H-1);

LL minu = 0;

for(int i = 1; i <= B; ++i)

minu = (minu + C(H-A+i-2, H-A-1)*C(A+W-i+1-2,A-1)%mod)%mod;

cout << ((res-minu)%mod+mod)%mod << endl;

return 0;

}

<hr/>
####E - 和風いろはちゃん / Iroha and Haiku
没有找到英文题解和中文题解。。。。。
这个题,感觉有点难。起初思路是算组合数,毕竟数据范围很小,算出1-7的拆分数的每种情况,然后算组合数和排列呗。
算了好久,不知道哪里错了,看了http://imulan.hatenablog.jp/entry/2016/07/24/233524这个题解,才发现有地方重复计算了。
然后又看了https://kimiyuki.net/blog/2016/07/23/arc-058-e/这个题解,还有官方题解,理解的模模糊糊。
比如说1用1表示,2用10表示,3用100表示,即i用(1<<(i-1))表示。
在这里是计算出不合法的数量,总数量-不合法数量=结果。
比如说要的X,Y,Z是5,7,5,表示这个结果的状态就是10000100000010000。
然后枚举每种情况。。。
还是有点懵。。。路过的大佬求解答。。
感觉日语翻译成英语比翻译成汉语读着顺一点。。

include

include

include

typedef long long ll;

using namespace std;

const int mod = 1e9+7;

ll dp[41][1<<18];

int main()

{

int n, x, y, z;

scanf("%d%d%d%d", &n, &x, &y, &z);

int l = x+y+z-1;

int mask = (1<<l)-1;

int limit = (1<<l);

int ok = (1 << (x+y+z-1)) | (1 << (y+z-1)) | (1 << (z-1));

dp[0][0] = 1;

for(int i = 0; i < n; ++i)

{

for(int s = 0; s < limit; ++s)

{

for(int a = 1; a < 11; ++a)

{

int t = (s << a) | (1 << (a-1));

if ((ok&t) == ok) continue;

//旧的状态向新的状态转移

(dp[i+1][t & mask] += dp[i][s]) %= mod;

}

}

}

ll ans = 1;

for(int i = 0; i < n; ++i)

ans = ans * 10 % mod;

//去掉每种状态的不合法数量

for(int s = 0; s < limit; ++s)

ans -= dp[n][s];

ans = (ans % mod + mod) % mod;
printf("%lld\n", ans);
return 0;

}

<hr/>
####F - 文字列大好きいろはちゃん / Iroha Loves Strings
------不会

AtCoder Regular Contest 058的更多相关文章

  1. Atcoder Regular Contest 058 D - 文字列大好きいろはちゃん / Iroha Loves Strings(单调栈+Z 函数)

    洛谷题面传送门 & Atcoder 题面传送门 神仙题. mol 一发现场(bushi)独立切掉此题的 ycx %%%%%%% 首先咱们可以想到一个非常 naive 的 DP,\(dp_{i, ...

  2. AtCoder Regular Contest 061

    AtCoder Regular Contest 061 C.Many Formulas 题意 给长度不超过\(10\)且由\(0\)到\(9\)数字组成的串S. 可以在两数字间放\(+\)号. 求所有 ...

  3. AtCoder Regular Contest 094 (ARC094) CDE题解

    原文链接http://www.cnblogs.com/zhouzhendong/p/8735114.html $AtCoder\ Regular\ Contest\ 094(ARC094)\ CDE$ ...

  4. AtCoder Regular Contest 092

    AtCoder Regular Contest 092 C - 2D Plane 2N Points 题意: 二维平面上给了\(2N\)个点,其中\(N\)个是\(A\)类点,\(N\)个是\(B\) ...

  5. AtCoder Regular Contest 093

    AtCoder Regular Contest 093 C - Traveling Plan 题意: 给定n个点,求出删去i号点时,按顺序从起点到一号点走到n号点最后回到起点所走的路程是多少. \(n ...

  6. AtCoder Regular Contest 094

    AtCoder Regular Contest 094 C - Same Integers 题意: 给定\(a,b,c\)三个数,可以进行两个操作:1.把一个数+2:2.把任意两个数+1.求最少需要几 ...

  7. AtCoder Regular Contest 095

    AtCoder Regular Contest 095 C - Many Medians 题意: 给出n个数,求出去掉第i个数之后所有数的中位数,保证n是偶数. \(n\le 200000\) 分析: ...

  8. AtCoder Regular Contest 102

    AtCoder Regular Contest 102 C - Triangular Relationship 题意: 给出n,k求有多少个不大于n的三元组,使其中两两数字的和都是k的倍数,数字可以重 ...

  9. AtCoder Regular Contest 096

    AtCoder Regular Contest 096 C - Many Medians 题意: 有A,B两种匹萨和三种购买方案,买一个A,买一个B,买半个A和半个B,花费分别为a,b,c. 求买X个 ...

随机推荐

  1. mysql8.0 安装版没有my.ini

    这时候,打开 benchmark,看一下实际路径就好了

  2. 模板方法(Template Method)(父类声明算法骨架,子类具体不同实现)

    在阎宏博士的<JAVA与模式>一书中开头是这样描述模板方法(Template Method)模式的: 模板方法模式是类的行为模式.准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式 ...

  3. java-多态-object

    概要图 一 多态 1.1 多态的产生 下面的 红色部分降低了代码的可扩展性 Dog d = new Dog(); method(d); Cat c = new Cat(); method(c); } ...

  4. 2019-7-3-WPF-使用-Composition-API-做高性能渲染

    title author date CreateTime categories WPF 使用 Composition API 做高性能渲染 lindexi 2019-07-03 10:30:57 +0 ...

  5. Centos系统Python环境搭建和项目部署

    目录 一.Python 1. 源安装 Python3 2. SCL安装 Python3 3. 虚拟环境venv 4. 安装Flask 5. 安装gunicorn 二.安装Nginx 1. 安装Ngin ...

  6. toString方法和valueof()方法的区别

    JavaScript引用类型之Array数组的toString()和valueof()方法的区别   一.转换方法 1.在JavaScript中几乎所有对象都具有toLocaleString().to ...

  7. 软工作业——Alpha版本第一周小结

    姓名 学号 周前计划安排 每周实际工作记录 自我打分 zxl 061425 1.进行任务分析2.进行任务分配 1.对任务进行了初步的划分,但还为进行给模块间的联系2.给每人分配了任务3.负责扫码签到功 ...

  8. Kafka 集群安装

    Kafka 集群安装 环境: Linux 7.X kafka_2.x 在linux操作系统中,kafka安装在 /u04/app目录中 1. 下载 # wget https://mirrors.cnn ...

  9. <第一周> city中国城市聚类 testdata学生上网聚类 例子

    中国城市聚类 # -*- coding: utf-8 -*- kmeans算法 """ Created on Thu May 18 22:55:45 2017 @auth ...

  10. Leetcode896.Monotonic Array单调数列

    如果数组是单调递增或单调递减的,那么它是单调的. 如果对于所有 i <= j,A[i] <= A[j],那么数组 A 是单调递增的. 如果对于所有 i <= j,A[i]> = ...