CDQZ Day6

1
DP #2
题目名称 种植 计数 棋盘 树
输入文件名 plant.in count.in chess.in tree.in
输出文件名 plant.out count.out chess.out tree.out
每个测试点时

1s 1s 1s 1 s
测试点数目 10 10 10 10
每个测试点分

10 10 10 10
内存限制 256M 256M 256M 256M
是否有部分分 否 否 否 否
题目类型 传统 传统 传统 传统
注意:代码长度限制均为64K,不开O2。
2
1 1 种植 (plant.c/cpp/pas) .c/cpp/pas) .c/cpp/pas)
1.1 1.1 1.1 题目描述 题目描述
现在 有一块 有一块 n 行 m 列的地,你想要 你想要 在上面 在上面 种植 你心爱 的花,为了 避免 它们 争夺 肥料 , 你希望 任意 两朵花 两朵花 不能 上下左右 上下左右 紧邻 。另外 一些 地方 杂草 丛生 ,所以 你不能 在这些 位置 种上 你的 花。
现在 你希望 你希望 知道 有多少种 多少种 种花 的方案 ,注意 什么 都不种 也是 一种 方案 。
1.2 1.2 1.2 输入格式 输入格式
第一行为两 第一行为两 个整数 个整数 n ,m,表示 行和列。
接下来 n 行,每行 m 个数,若为 0表示 该位置 不能 种花 ,为 1 表示 能种花 。
1.3 1.3 1.3 输出格式 输出格式
输出 一行个整数,表示 一行个整数,表示 一行个整数,表示 一行个整数,表示 一行个整数,表示 方案数 对 100 000 00 0 取模 的结果 。
1.4 1.4 1.4 样例输入 样例输入
2 3
1 1 1
0 1 0
1.5 1.5 1.5 样例输出 样例输出
9
1.6 1.6 1.6 数据范围与约定 数据范围与约定 数据范围与约定 数据范围与约定
对于 20%的数据, %的数据, %的数据, n , m<= 5。
对于 40%的数据, 的数据, n , m<= 10 。
对于 100%的数据 ,n, m<=12。
3
2 2 计数 (count count .c/cpp/pas) .c/cpp/pas) .c/cpp/pas)
2.1 .1 .1 题目描述 题目描述
给出 L,R ,求 [L,R] [L,R] [L,R] [L,R] 之中各位数字和能整除原的个。 之中各位数字和能整除原的个。 之中各位数字和能整除原的个。 之中各位数字和能整除原的个。 之中各位数字和能整除原的个。 之中各位数字和能整除原的个。 之中各位数字和能整除原的个。 之中各位数字和能整除原的个。 之中各位数字和能整除原的个。
2.2 .2 .2 输入格式 输入格式
一行 两个 整数,分别 表示 L, R。
2.3 .3 .3 输出格式 输出格式
输出 一行 一个数, 一个数, 一个数, 表示 答案 。
2.4 .4 .4 样例输入 样例输入
10 19
2.5 .5 .5 样例输出 样例输出
3
2.6 .6 .6 数据范围与约定 数据范围与约定 数据范围与约定 数据范围与约定
对于 20%的数据,保证 %的数据,保证 %的数据,保证 %的数据,保证 R<=100000。
对于 100 %的数据,保证 %的数据,保证 %的数据,保证 %的数据,保证 1 <= L <= R <= 10 18。
4
3 棋盘 (chess chess .c/cpp/pas) .c/cpp/pas) .c/cpp/pas)
3.1 .1 .1 题目描述 题目描述
你现在 要在 棋盘 上放棋子 ,棋盘规格为 棋盘规格为 棋盘规格为 n*m,需要 满足 任意一个 任意一个 任意一个 n*n 的区域内都有 的区域内都有 的区域内都有 C 个棋子。 个棋子。 请输出 有多少个满足条件的方案。 有多少个满足条件的方案。 有多少个满足条件的方案。 有多少个满足条件的方案。 有多少个满足条件的方案。 有多少个满足条件的方案。
3.2 .2 .2 输入格式 输入格式
一行 三个 整数 n, m, C,含义 如题 所述 。
3.3 .3 .3 输出格式 输出格式
输出一行个整数, 输出一行个整数, 输出一行个整数, 输出一行个整数, 表示 答案 对 109+7 取模 的结果 。
3.4 .4 .4 样例输入 样例输入
2 3 1
3.5 .5 .5 样例输出 样例输出
6
3 .6 .6 .6 数据范围与约定 数据范围与约定 数据范围与约定
对于 20%的数据, %的数据, %的数据, n, K<=4;
对于 另外 20%的数据 ,m=n;
对于 另外 20%的数据 ,n<=50;
对于 100 %的数据, %的数据, %的数据, 1<=n<=100;1<=m<=1018;1<=C<=n2
5
4 树(tree.c/cpp/pas) .c/cpp/pas) .c/cpp/pas)
4.1 .1 .1 题目描述 题目描述
现在 有一棵 有一棵 n 个点的树,每个点 颜色 非黑即白 非黑即白 ,有 Q次询问 ,每次 给出 x, y,询问 是 否存在 一个 x 个点的联通 子图 ,其中 黑点 数目 为 y。
4.2 .2 .2 输入格式 输入格式
第一行 两个 整数, 整数, n 和 Q ,分别 表示树的节点数和询问次。 表示树的节点数和询问次。 表示树的节点数和询问次。 表示树的节点数和询问次。 表示树的节点数和询问次。 表示树的节点数和询问次。 表示树的节点数和询问次。
接下来 n-1 行,每两个 行,每两个 行,每两个 行,每两个 数 a,b,表示 a、b之间 有一条 边。
接下来一行有 接下来一行有 接下来一行有 n 个用空格隔开的整数, 个用空格隔开的整数, 个用空格隔开的整数, 个用空格隔开的整数, 个用空格隔开的整数, 第 i个数若为 1,则表示第 ,则表示第 ,则表示第 i 个点为白色,否 个点为白色,否 个点为白色,否 个点为白色,否 则为黑色。 则为黑色。
接下来 Q 行,每两个用空格隔开的整数 行,每两个用空格隔开的整数 行,每两个用空格隔开的整数 行,每两个用空格隔开的整数 行,每两个用空格隔开的整数 行,每两个用空格隔开的整数 行,每两个用空格隔开的整数 行,每两个用空格隔开的整数 x 和 y,表示 询问 。
4.3 .3 .3 输出格式 输出格式
输出 Q行,每行 为“YES YES”表示 存在 ,或“NO ”表示 不存在 不存在 。
4.4 .4 .4 样例 输入 9 4 4 1 1 5 1 2 3 2 3 6 6 7 6 8 9 6 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 3 2 7 3 4 0 9 5
4.5 .5 .5 样例输出 样例输出
YES YES
YES YES
NO
NO
4.6 .6 .6 数据范围与约定 数据范围与约定 数据范围与约定 数据范围与约定
对于 20%的数据,保证 %的数据,保证 %的数据,保证 %的数据,保证 n <= 10。
对于 50%的数据,保证 %的数据,保证 %的数据,保证 %的数据,保证 1<=n<=500。
对于 100 %的数据,保证 %的数据,保证 %的数据,保证 %的数据,保证 1<=n<=5000n<=5000n<=5000n<=5000n<=5000n<=5000n<=5000,q<=10^5q<=10^5q<=10^5q<=10^5q<=10^5q<=10^5q<=10^5

  1 #include<cstdio>
  2 #include<cstring>
  3 //#include<iostream>
  4 #include<algorithm>
  5 #include<cmath>
  6 #include<vector>
  7 //#include<stack>
  8 #include<bitset> 
  9 #define R(a,b,c) for(register int (a)=(b);(a)<=(c);++(a))
 10 #define nR(a,b,c) for(register int (a)=(b);(a)>=(c);--(a))
 11 #define Ii inline int
 12 #define Iv inline void
 13 #define Il inline long long
 14 #define Ib inline bool
 15 #define INF 0x7ffffff
 16 #define re register
 17 #define ll long long
 18 #define Max(a,b) ((a)>(b)?(a):(b))
 19 #define Min(a,b) ((a)<(b)?(a):(b))
 20 #define Cmin(a,b) ((a)=(a)<(b)?(a):(b))
 21 #define Cmax(a,b) ((a)=(a)>(b)?(a):(b))
 22 #define Fill(a,b) memset((a),(b),sizeof((a)))
 23 #define D_e_Line printf("\n-------------\n");
 24 #define D_e(x) printf("\n______%d_______\n",x)
 25 #define Pause() system("pause")
 26 using namespace std;
 27 const int N=5005;
 28 Ii read(){
 29     int s=0,f=1;char c;
 30     for(c=getchar();c>'9'||c<'0';c=getchar())if(c=='-')f=-1;
 31     while(c>='0'&&c<='9')s=s*10+(c^'0'),c=getchar();
 32     return s*f;
 33 }
 34 template<class T>Iv print(T x){
 35     if(x<0)putchar('-'),x=-x;
 36     if(x>9)print(x/10);
 37     putchar(x%10^'0');    
 38 }
 39 bitset<N>w;
 40 vector<int>V[N];
 41 int ans[N][N],points,black,n,flag;
 42 Iv dfs(int u,int size,int tot){
 43     if(size==points&&tot==black){flag=1;return;}
 44     if(size>points)return;
 45     for(vector<int>::iterator v=V[u].begin();v!=V[u].end();++v)
 46         dfs(*v,size+1,tot+(!w[*v]));
 47 }
 48 Ib Check(){
 49     flag=0;
 50     R(i,1,n)
 51         dfs(i,0,0);
 52     return flag;
 53 }
 54 #define ON_JUD
 55 int main(){
 56 #ifdef  ON_JUD
 57     freopen("tree.in","r",stdin),freopen("tree.out","w",stdout);
 58 #endif
 59     n=read();
 60     int T=read();
 61     R(i,1,n-1){
 62         int u=read(),v=read();
 63         V[u].push_back(v),V[v].push_back(u);
 64     }
 65     R(i,1,n)
 66         w[i]=1-read();
 67     R(i,1,n-1)
 68         R(j,1,n-1)
 69             points=i,black=j,
 70             ans[i][j]=Check();
 71     while(T--){
 72         points=read(),black=read();
 73         if(points>=n)
 74             printf("NO\n");
 75         else if(ans[points][black]==1)
 76             printf("YES\n");
 77         else
 78             printf("NO\n");
 79     }
 80     return 0;
 81 }
 82 /*
 83 9 4
 84 4 1
 85 1 5
 86 1 2
 87 3 2
 88 3 6
 89 6 7
 90 6 8
 91 9 6
 92 0 1 0 1 0 0 1 0 1
 93 3 2
 94 7 3
 95 4 0
 96 9 5
 97 
 98 9 4
 99 4 1
100 1 5
101 1 2
102 3 2
103 3 6
104 6 7
105 6 8
106 9 6
107 0 1 0 1 0 0 1 0 1
108 4 0
109 3 2
110 7 3
111 9 5
112 
113 9 1034923948
114 4 1
115 1 5
116 1 2
117 3 2
118 3 6
119 6 7
120 6 8
121 9 6
122 0 1 0 1 0 0 1 0 1
123 7 3
124 */
plant_My_CreatOnContest
  1 #include<cstdio>
  2 #include<cstring>
  3 //#include<iostream>
  4 #include<algorithm>
  5 #include<cmath>
  6 #include<vector>
  7 //#include<stack>
  8 #include<bitset> 
  9 #define R(a,b,c) for(register int (a)=(b);(a)<=(c);++(a))
 10 #define nR(a,b,c) for(register int (a)=(b);(a)>=(c);--(a))
 11 #define Ii inline int
 12 #define Iv inline void
 13 #define Il inline long long
 14 #define Ib inline bool
 15 #define INF 0x7ffffff
 16 #define re register
 17 #define ll long long
 18 #define Max(a,b) ((a)>(b)?(a):(b))
 19 #define Min(a,b) ((a)<(b)?(a):(b))
 20 #define Cmin(a,b) ((a)=(a)<(b)?(a):(b))
 21 #define Cmax(a,b) ((a)=(a)>(b)?(a):(b))
 22 #define Fill(a,b) memset((a),(b),sizeof((a)))
 23 #define D_e_Line printf("\n-------------\n");
 24 #define D_e(x) printf("\n______%d_______\n",x)
 25 #define Pause() system("pause")
 26 using namespace std;
 27 const int N=5005;
 28 Ii read(){
 29     int s=0,f=1;char c;
 30     for(c=getchar();c>'9'||c<'0';c=getchar())if(c=='-')f=-1;
 31     while(c>='0'&&c<='9')s=s*10+(c^'0'),c=getchar();
 32     return s*f;
 33 }
 34 template<class T>Iv print(T x){
 35     if(x<0)putchar('-'),x=-x;
 36     if(x>9)print(x/10);
 37     putchar(x%10^'0');    
 38 }
 39 bitset<N>w;
 40 vector<int>V[N];
 41 int ans[N][N],points,black,n,flag;
 42 Iv dfs(int u,int size,int tot){
 43     if(size==points&&tot==black){flag=1;return;}
 44     if(size>points)return;
 45     for(vector<int>::iterator v=V[u].begin();v!=V[u].end();++v)
 46         dfs(*v,size+1,tot+(!w[*v]));
 47 }
 48 Ib Check(){
 49     flag=0;
 50     R(i,1,n)
 51         dfs(i,0,0);
 52     return flag;
 53 }
 54 #define ON_JUD
 55 int main(){
 56 #ifdef  ON_JUD
 57     freopen("tree.in","r",stdin),freopen("tree.out","w",stdout);
 58 #endif
 59     n=read();
 60     int T=read();
 61     R(i,1,n-1){
 62         int u=read(),v=read();
 63         V[u].push_back(v),V[v].push_back(u);
 64     }
 65     R(i,1,n)
 66         w[i]=1-read();
 67     R(i,1,n-1)
 68         R(j,1,n-1)
 69             points=i,black=j,
 70             ans[i][j]=Check();
 71     while(T--){
 72         points=read(),black=read();
 73         if(points>=n)
 74             printf("NO\n");
 75         else if(ans[points][black]==1)
 76             printf("YES\n");
 77         else
 78             printf("NO\n");
 79     }
 80     return 0;
 81 }
 82 /*
 83 9 4
 84 4 1
 85 1 5
 86 1 2
 87 3 2
 88 3 6
 89 6 7
 90 6 8
 91 9 6
 92 0 1 0 1 0 0 1 0 1
 93 3 2
 94 7 3
 95 4 0
 96 9 5
 97 
 98 9 4
 99 4 1
100 1 5
101 1 2
102 3 2
103 3 6
104 6 7
105 6 8
106 9 6
107 0 1 0 1 0 0 1 0 1
108 4 0
109 3 2
110 7 3
111 9 5
112 
113 9 1034923948
114 4 1
115 1 5
116 1 2
117 3 2
118 3 6
119 6 7
120 6 8
121 9 6
122 0 1 0 1 0 0 1 0 1
123 7 3
124 */
tree_My_CreatOnContest

猜你喜欢

转载自www.cnblogs.com/bingoyes/p/10327567.html