这个应该是第一场有英文的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. C++: Mac上安装Boost库并使用CLion开发

    1.下载安装Boost库 官网下载最新版本1.65.0:http://www.boost.org/users/history/version_1_65_0.html 选择UNIX版本: 下载后解压cd ...

  2. SVG 动态添加元素与事件

    SVG文件是由各个元素组成.元素由标签定义,而标签格式即html的元素定义格式.但是载入一个SVG文件,却无法通过常规的js获取对象方式来获取到SVG中定义的元素,更无法通过这种方式来动态添加SVG元 ...

  3. 洛谷P1621 集合 [2017年6月计划 数论13]

    P1621 集合 题目描述 现在给你一些连续的整数,它们是从A到B的整数.一开始每个整数都属于各自的集合,然后你需要进行一下的操作: 每次选择两个属于不同集合的整数,如果这两个整数拥有大于等于P的公共 ...

  4. Leetcode77. Combinations组合

    给定两个整数 n 和 k,返回 1 ... n 中所有可能的 k 个数的组合. 示例: 输入: n = 4, k = 2 输出: [ [2,4], [3,4], [2,3], [1,2], [1,3] ...

  5. idea展开和折叠方法的快捷键

    Ctrl+"+/-",当前方法展开.折叠 Ctrl+Shift+"+/-",全部展开.折叠

  6. 七.RBM受限玻尔兹曼机

    1.受限玻尔兹曼机   玻尔兹曼机是一大类的神经网络模型,但是在实际应用中使用最多的则是受限玻尔兹曼机(RBM). 受限玻尔兹曼机(RBM)是一个随机神经网络(即当网络的神经元节点被激活时会有随机行为 ...

  7. Codeforces 113C

    题目链接 C. Double Happiness time limit per test 5 seconds memory limit per test 128 megabytes input sta ...

  8. HTML 实体字符

    有些字符,像(<)这类的,对HTML来说是有特殊意义的,所以这些字符是不允许在文本中使用的.要在HTML中显示(<)这个字符,我们就必须使用实体字符. 实体字符 有一些字符对HTML来讲是 ...

  9. UIImageView添加圆角

    最直接的方法就是使用如下属性设置: 1 2 3 imgView.layer.cornerRadius = 10; // 这一行代码是很消耗性能的 imgView.clipsToBounds = YES ...

  10. Leetcode703.Kth Largest Element in a Stream数据流中的第K大元素

    设计一个找到数据流中第K大元素的类(class).注意是排序后的第K大元素,不是第K个不同的元素. 你的 KthLargest 类需要一个同时接收整数 k 和整数数组nums 的构造器,它包含数据流中 ...