这次写day2的总结

T1:表达式

题面:给你一串表达式

在本题中,我们对合法表达式定义如下:
1. 任何连续(至少1个)数字是合法表达式;
2. 若x是合法表达式,则(x)也是合法表达式;
3. 若x和y 是合法表达式,则x+y、x-y、x*y、x/y都是合法表达式;
4. 若x是合法表达式,则在x 前后添加任意数量的空白符也是合法表达式。
现在给你若干个表达式,请你判断这些表达式是否是合法的。

emmmm,写一个类似于区间dp的东西就行啦(的确定复合NOIPday2T2的难度的,但是好麻烦的感觉)

emmmmm自己没有来得及改自己的wa程序,借用学长的ac程序

#include <bits/stdc++.h>

using namespace std;

#define ll long long
#define up(i,j,n) for (int i = j; i <= n; i++)
#define down(i,j,n) for (int i = j; i >= n; i--)
#define cmax(a,b) a = max (a, b)
#define cmin(a,b) a = min (a, b)
#define FILE "expr" const int MAXN = ;
const int oo = 0x3f3f3f3f; int T, N;
char s[MAXN];
int vaild[MAXN][MAXN]; bool isop(char o){
if (o == '+') return ;
if (o == '-') return ;
if (o == '*') return ;
if (o == '/') return ;
return ;
} bool allempty(int le, int ri){
up (i, le, ri) if (s[i] != ' ') return ;
return ;
} bool chk(int le, int ri){
if (vaild[le][ri] != -) return vaild[le][ri];
if (le > ri) return vaild[le][ri] = ;
if (allempty(le, ri)) return vaild[le][ri] = ;
vaild[le][ri] = ;
bool allnumber = ;
up (i, le, ri) if (s[i] < '' || s[i] > '') {
allnumber = ;
break;
}
if (allnumber) return vaild[le][ri] = ;
if (le == ri) return vaild[le][ri] = ;
if (s[le] == '(' && s[ri] == ')') return vaild[le][ri] = chk(le + , ri - );
bool ok[MAXN];
up (i, le, ri) ok[i] = ;
up (i, le, ri) if (isop(s[i])) {
if (chk(le, i - )) ok[i - ] |= ;
up (j, le + , i - ) if (isop(s[j]) && ok[j - ])
ok[i - ] |= chk(j + , i - );
}
up (i, le + , ri) if (isop(s[i]) && ok[i - ])
vaild[le][ri] |= chk(i + , ri);
int lower = le - , upper = ri + ;
while (s[lower + ] == ' ') lower++;
while (s[upper - ] == ' ') upper--;
vaild[le][ri] |= chk(lower + , upper - );
return vaild[le][ri];
} int main(){
freopen(FILE".in", "r", stdin);
freopen(FILE".out", "w", stdout);
scanf("%d", &T);
char ch = getchar();
while (T--) {
gets(s);
N = strlen(s);
up (i, , N - ) up (j, i, N - ) vaild[i][j] = -;
puts(chk(, N - ) ? "Yes" : "No");
}
return ;
}

T2:食物链

emmmmm省选题还行

题面:给你一些捕食关系,求有多少条食物链

emmmm一A?类似于拓扑序的东西,我把每一个当前入度为零的点所连的边的权设成1,每次去边就往下传递值,最后一个点就是答案。

#include<bits/stdc++.h>
#define mode 1000000007
using namespace std;
map<string,int> a;
int m;
struct node
{
int y;
int next;
}b[];
int lv[];
int n;
int sum;
int f[];
int op[];
int vl[];
int q[];
int num; void init()
{
cin>>m;
memset(lv,,sizeof(lv));
memset(op,,sizeof(op));
for(int i=;i<=m;i++)
{
string x;
string y;
cin>>x>>y;
if(a[x]==)
a[x]=++n;
if(a[y]==)
a[y]=++n;
b[++sum].y=a[y];
b[sum].next=f[a[x]];
f[a[x]]=sum;
lv[a[y]]++;
vl[a[x]]++;
}
num=n;
} void topsort(int x)
{
q[]=x;
op[x]=;
int tou=,wei=;
while(tou<wei)
{
tou++;
int t=q[tou];
for(int i=f[t],y;i;i=b[i].next)
{
lv[y=b[i].y]--;
op[y]=(op[y]+op[t])%mode;
if(lv[y]==)q[++wei]=y;
}
}
cout<<op[wei]<<endl;
} int main()
{
freopen("chain.in","r",stdin);
freopen("chain.out","w",stdout);
init();
for(int i=;i<=n;i++)
if(lv[i]==)b[++sum].y=i,b[sum].next=f[n+],f[n+]=sum,lv[i]++;
for(int i=;i<=n;i++)
if(vl[i]==)b[++sum].y=n+,b[sum].next=f[i],f[i]=sum,lv[n+]++;
topsort(n+);
int yu=;
/*for(int i=1;i<=n;i++)
if(vl[i]==0)yu=(op[i]+yu)%mode;
cout<<yu<<endl;*/
}

T3:emmmm学长说是出烂的题了

题面:从(0,0)走到(n,m)有多少种走法,其中有k个点是坏点,不能通过。

山神讲过的题,把每个坏点排序,x为第一关键字,y第二关键字,从小到大,

设dp[i]表示到第i个坏点且不经过其他坏点的总方案数,新增加一个点(n,m),则dp[k]为所求答案。

则有状态转移方程dp[i] = C[x[i]+y[i],x[i]) - sum(dp[j] * C(x[i] - x[j] + y[i] - y[j],x[i] - x[j])

那么问题就是快速求组合数了,容我智障,数论0基础,不会求

学长教了一种o(n)预处理,o(1)查询的求组合数的方法。

int C(int a, int b){
if (a < || b < || a < b) return ;
return mul(fac[a], mul(inv[b], inv[a - b]));
}
void Prepare(){
scanf("%d%d%d", &N, &M, &K);
up (i, , K) scanf("%d%d", &a[i].fi, &a[i].se);
a[++K] = make_pair(N, M);
sort(a + , a + K + );
fac[] = ; inv[] = ; inv[] = ;
up (i, , LIM) fac[i] = mul (i, fac[i - ]);
up (i, , LIM) inv[i] = mul (mod - mod / i, inv[mod % i]);
up (i, , LIM) cmul(inv[i], inv[i - ]);
}

10-17(day2)的更多相关文章

  1. RDIFramework.NET ━ 9.10 岗位(职位)管理 ━ Web部分

    RDIFramework.NET ━ .NET快速信息化系统开发框架 9.10  岗位(职位)管理 -Web部分 岗位(职位)管理模块主要是针对组织机构的岗位(职位)进行管理,包括:增加.修改.删除. ...

  2. 【转1】Appium 1.6.3 在Xcode 8, iOS 10.2(模拟器)测试环境搭建 经验总结

    Appium 1.6.3 在Xcode 8, iOS 10.2(模拟器)测试环境搭建 经验总结 关于 Appium 1.6.3 在Xcode 8, 10.2 的iOS模拟器上的问题很多,本人也差点放弃 ...

  3. Linux CentOS7下安装Zookeeper-3.4.10服务(最新)

    Linux CentOS7下安装Zookeeper-3.4.10服务(最新) 2017年10月27日 01:25:26 极速-蜗牛 阅读数:1933   版权声明:本文为博主原创文章,未经博主允许不得 ...

  4. Noip模拟79 2021.10.17(题目名字一样)

    T1 F 缩点缩成个$DAG$,然后根据每个点的度数计算期望值 1 #include<cstdio> 2 #include<cstring> 3 #include<vec ...

  5. python学习(day2)

    1.常用数据类型及内置方法 1.列表(list) 定义:在中括号[]内存放任意多个值,用逗号隔开. 具体函数和内置方法如下: #定义学生列表,可存放多个学生 students=['a','b','c' ...

  6. python第10天(下)

    https://www.cnblogs.com/zingp/p/6863170.html  一:IO模型介绍 IO发生时涉及的对象和步骤 对于一个网络IO(network IO),它会涉及到两个系统对 ...

  7. 自学python之路(day2)

    1. 格式化输出 %表示占位符 ,s表示字符串 ,d表示数字,%s就是代表字符串占位符,%d,是数字占位符 示例1:输入用户的姓名.性别.年龄.爱好的通用模板 name = input("请 ...

  8. swift 集成使用最新版百度地图_v2.10.2(一)

    目前在开发中使用百度地图的APP越来越多了,我在网上找的集成百度地图的例子不是很多,于是我就将我集成百度地图的过程记录了下来: 一.前提:安装CocoaPods sudo gem install co ...

  9. 浅谈自学Python之路(day2)

    今天的主要内容是: 标准库 数据类型知识 数据运算 三元运算 bytes类型 字符串操作 字典 集合 标准库 Python的强大之处在于他有非常丰富和强大的标准库和第三方库,几乎你想实现的任何功能都有 ...

  10. 【Unity|C#】基础篇(10)——泛型(Generic)/ 泛型约束条件(where)

    [学习资料] <C#图解教程>(第17章):https://www.cnblogs.com/moonache/p/7687551.html 电子书下载:https://pan.baidu. ...

随机推荐

  1. CentOs下mysql-5.6.39-linux-glibc2.12-x86_64.tar.gz压缩包的安装

    之前写过一篇mysql在windows下的安装(猛击这儿),linux下用的比较少,最近切换到linux服务器了,发行mysql安装和windows下有所不同,只记录压缩包方式安装,rpm包类似 1. ...

  2. Ascii vs. Binary Files

    Ascii vs. Binary Files Introduction Most people classify files in two categories: binary files and A ...

  3. Python 之 numpy 和 tensorflow 中的各种乘法(点乘和矩阵乘)

    点乘和矩阵乘的区别: 1)点乘(即“ * ”) ---- 各个矩阵对应元素做乘法 若 w 为 m* 的矩阵,x 为 m*n 的矩阵,那么通过点乘结果就会得到一个 m*n 的矩阵. 若 w 为 m*n ...

  4. Spring Cloud Sleuth进阶实战

    转载请标明出处: http://blog.csdn.net/forezp/article/details/76795269 本文出自方志朋的博客 为什么需要Spring Cloud Sleuth 微服 ...

  5. I.MX6 HUAWEI MU609 3G porting

    /*************************************************************************** * I.MX6 HUAWEI MU609 3G ...

  6. 【计算机视觉】如何使用于仕琪老师的libfacedetect人脸检测库

    前言 最近又开始进行人脸检测方向的内容,看到于仕琪老师的多角度检测想试一下,还不清楚原理,先测试效果如何. libfacedetect人脸检测库是深圳大学于仕琪老师发布的开源库,与opencv自带的人 ...

  7. Unity3D-实现连续点击两次返回键退出游戏(安卓/IOS)

    Unity3D-连续点击两次返回键退出游戏 本文提供全流程,中文翻译.Chinar坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) 1 Count ...

  8. python3反射

    class Cmd:# def __init__(self,name):# self.name = name def run(self): while 1: cmd = input('>> ...

  9. ASP.NET 4.0尚未在 Web 服务器上注册

    ASP.NET 4.0尚未在 Web 服务器上注册 解决方法 使用VS2010创建web应用程序时出现如下提示ASP.NET 4.0尚未在 Web 服务器上注册.为了使网站正确运行,可能需要手动将 W ...

  10. mac OS 安装 scikit-learn

    最近用来做实验,使用python时发现scikit-learn提供的库非常好用.因此,在电脑上果断下载安装: step1: sudo easy_install pip step2: sudo pip ...