集训队日常训练20181117 DIV2
大佬们一顿操作猛如虎,拼命AC强啊
4262: 区间异或
Total Submit: 139 Accepted:58
Description
zzd通过艰苦的学习,终于领悟了异或(^)的计算方法.
可是现在他面前出现了一道难题,zzd陷入了迷茫之中…你能帮帮他么?
给出一个长为N的序列{A1, A2, A3, ... , An}。求解区间[L,R]的异或和 A(L)^A(L+1)^ ... ^ A(R)。
Input
题目数据有多组,请读入至文件结束。
每组第一行给出两个整数N,M(1<=N<=1000000, 1<=M<=100000)。N代表序列的长度,M代表询问数。
接下来有N行,每行有一个整数A(0<=A<=32767),代表序列的每一项。
接下来有M行,每行有两个整数L、R(1<=L<=R<=N),代表询问的区间。
Output
对于每组询问[L,R],请输出[L,R]区间的异或和。
Sample Input
5 3
1 2 3 4 5
1 1
1 5
2 4
Sample Output
1
1
5
Hint
大量数据,请使用scanf、printf输入输出
看起来好像是个O(q*n)或者O(n*n)的算法,但是不是的啊,异或有个性质,相同两个数异或为0,所以可以借助前缀和去优化
#include <stdio.h>
int a[],b[];
int main()
{
int m,n;
while(~scanf("%d%d",&n,&m))
{
for(int i=; i<=n; i++)
scanf("%d",&a[i]),b[i]=a[i]^b[i-];
while(m--)
{
int l,r;
scanf("%d%d",&l,&r);
int f=b[r];//1到r的异或值
for(int i=; i<l; i++)f^=a[i];//消除1到l-1的影响
printf("%d\n",f);
}
}
return ;
}
所以我sb了,后面的不直接是存着的。直接b[r]^b[l-1]就完事
那么如果不是^,是gcd或者|或者&呢,可以用二分+ST表或者利用这个递减很快的性质去解决
//https://vjudge.net/problem/Gym-101532A
#include<bits/stdc++.h>
using namespace std;
int fun(int x,int y)
{
return x&y;
}
const int N=1e5+;
int n,a[N],l[N],v[N];
int main()
{
ios::sync_with_stdio(),cin.tie(),cout.tie();
int T;
cin>>T;
while(T--)
{
cin>>n;
for(int i=; i<=n; i++)cin>>a[i];
long long ans=;
for(int i=,j; i<=n; i++)
for(v[i]=a[i],j=l[i]=i; j; j=l[j]-)
{
v[j]=fun(v[j],a[i]);
while(l[j]>&&fun(a[i],v[l[j]-])==fun(a[i],v[j]))l[j]=l[l[j]-];
ans+=v[j]*1LL*(j-l[j]+);
}
cout<<ans<<"\n";
}
return ;
}
Claris的niubi模板
1535: 找规律填数字
Total Submit: 1314 Accepted:583
Description
小瑜还在读幼儿园呢,现在的小孩子正够可怜的......
这不,老师给孩子们布置了一道连很多大人都不会的数学题目。且看:
给你一组有规律序列的前面5个整数,请你给出它后面跟着的5个整数,如:1,2,3,4,5,___,___,___,__,___。这是个等差数列, 后面应该是6,7,8,9,10,这倒简单。但现在老师告诉孩子们这串序列有可能是等差数列,等比数列或者是斐波那契数列。亲爱的,你能帮小瑜完成这个题目吗?
Input
输入有多组数据,每组数据占一行,有5个数字组成,每个数字之间隔一个空格,当5个数字都为0时输入结束。
Output
每组测试数据对应一个输出为这串数列的后面5个数字,每个数字之间隔一个空格。当输入的5个数字都为0时不用输出结果。
Sample Input
1 2 3 4 5
1 2 4 8 16
1 2 3 5 8
0 0 0 0 0
Sample Output
6 7 8 9 10
32 64 128 256 512
13 21 34 55 89
Hint
#include <iostream>
#include <cstdio>
using namespace std; int main()
{
int a[];
while(scanf("%d%d%d%d%d",&a[],&a[],&a[],&a[],&a[]),a[]||a[]||a[]||a[]||a[])
{
int flag=,k;
if(a[]-a[]==a[]-a[])
{
flag=;
k=a[]-a[];
for(int i=; i<; i++)
{
a[i]=a[i-]+k;
}
}
else if(a[]*a[]==a[]*a[])
{
flag=;
k=a[]/a[];
for(int i=; i<; i++)
{
a[i]=a[i-]*k;
}
}
else
{
flag=;
for(int i=; i<; i++)
{
a[i]=a[i-]+a[i-];
}
}
for(int i=; i<; i++)
{
if(i!=)printf(" ");
printf("%d",a[i]);
}
printf("\n");
}
return ;
}
1438: 螺旋形
Total Submit: 576 Accepted:183
Description
输入n,(0 < n <= 20),建立n*n二维数组,按照下图规则把1~n*n个数放在n*n二维数组中,然后按行优先顺序输出。
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
Input
输入数据由多个测试实例组成,每个测试实例占一行,包括一个整数n(0<n<=20),n的含义如题目中描述。n=0表示输入数据的结束,不做处理。
Output
对于每个测试实例,输出该二维数组,该二维数组按行输出,行中数据之间有一个空格,每个数据占3个字符位置,左对齐,注意每行的最后一个元素后面没有空格,每个测试例子后面有空行。
Sample Input
1
2
3
0
Sample Output
1
1 2
4 3
1 2 3
8 9 4
7 6 5
Source
真实模拟题,不过我这个写法好像有点过于强了,应该是螺旋矩阵的通解
#include <stdio.h>
int get(int x,int y,int n)
{
if(x<=y)
{
int k=(x<n--y)?x:n--y;
return *k*(n-k)++(x+y-k*);
}
int k=(y<n--x)?y:n--x;
k=k+;
return *k*(n-k)+-(x+y-(k-)*);
}
int main()
{
int n,i,j;
while(scanf("%d",&n)!=EOF,n)
{
int a[][];
for(i=; i<n; i++)
for(j=; j<n; j++)
a[i][j]=get(i,j,n);
for(i=; i<n; i++)
{
printf("%-3d",a[i][]);
for(j=; j<n; j++)
printf(" %-3d",a[i][j]);
printf("\n");
}
printf("\n");
}
return ;
}
模拟的代码,不够我个人喜欢while,稍微好控制些
solution from Nayo
#include<iostream>
#include<stdio.h>
using namespace std;
int main()
{
int t,a[][]= {};
while(cin>>t,t)
{
int num=;
for(int n=; n<=t/; n++)
{
for(int j=n; j<=t-n-; j++)
{
a[n][j]=num++;
}
for(int i=n+; i<t-n-; i++)
{
a[i][t-n-]=num++;
}
for(int j=t-n-; j>n; j--)
{
a[t-n-][j]=num++;
}
for(int i=t-n-; i>n; i--)
{
a[i][n]=num++;
}
}
for(int o=; o<t; o++)
{
for(int p=; p<t; p++)
{
if(p!=t-)
printf("%-3d ",a[o][p]);
else
printf("%-3d",a[o][p]);
}
cout<<endl;
}
cout<<endl;
}
}
4604: 搞笑版费马大定理
Total Submit: 238 Accepted:135
Description
费马大定理:当n>2时,不定方程an+bn=cn没有正整数解。比如a3+b3=c3没有正整数解。为了活跃气氛,我们不妨来个搞笑版:把方程改成a3+b3=c3,这样就有解了,比如a=4, b=9, c=79时43+93=793。
输入两个整数x, y, 求满足x<=a,b,c<=y的整数解的个数。
Input
输入最多包含10组数据。每组数据包含两个整数x, y(1<=x,y<=108)。
Output
对于每组数据,输出解的个数。
Sample Input
1 10
1 20
123 456789
Sample Output
Case 1: 0
Case 2: 2
Case 3: 16
题目都是骗人的,暴力就完事
#include <stdio.h>
int main()
{
int x,y,a,b,c,num,k=;
while(scanf("%d%d",&x,&y)!=EOF)
{
num=;
for(a=x; a<=&&a<=y; a++)
for(b=x; b<=&&b<=y; b++)
{
int s=a*a*a+b*b*b;
if(s%!=) continue;
c=s/;
if(c>=x&&c<=y) num++;
}
printf("Case %d: %d\n",k++,num);
}
return ;
}
4638: 单位转换
Total Submit: 633 Accepted:428
Description
BobLee最近在复习考研,在复习计算机组成原理的时候,遇到了一个问题。就是在计算机存储里面的单位转换。我们都知道1MB=1024KB,1KB=1024B,1B=8bit,他在做题的时候经常会遇到格式各样的,比如多少MB,KB,B什么的,但是都要转换为bit,题目做的太多他都迷茫了,现在需要你通过程序来帮他解决这个问题。
Input
输入为多行未化简的数据,如xMB,xKB,xB,xbit,(1<=x<=50)
Output
输出为换算过后的数据,ybit
Sample Input
1MB
1KB
1B
1bit
Sample Output
8388608bit
8192bit
8bit
1bit
简单模拟,请注意细节
#include <stdio.h>
#include <string.h>
int main()
{
int n;
char s[];
while(~scanf("%d%s",&n,s))
{
if(strcmp(s,"B")==)
n=n*;
else if(strcmp(s,"KB")==)
n=n**;
else if(strcmp(s,"MB")==)
n=n***;
printf("%dbit\n",n);
}
return ;
}
4650: 调皮的萌萌
Total Submit: 218 Accepted:89
Description
调皮的萌萌喜欢在传输的数据上做改动,具体方法如下:
在一串由0、1组成的数据中,执行任意次数(可能为0次)的如下的操作:
任意选取相邻的两位a、b,把这两位变成a or b、a xor b。
比如:10可变为11,11可变为01或10.
给你两个01串s1、s2,请你s2是否有可能是萌萌用s1改动的来的数据。
Input
输入数据包含多组测试数据。
每组数据包含两行0、1组成的字符串s1、s2。
Output
对于每组数据,如果s2可由s1改动而来,输出“YES”,否则输出“NO”。
Sample Input
11
10
1
01
000
101
Sample Output
YES
NO
NO
找找规律,按题意贪心吧,不过能证明是对的,CF DIV2B往往是这种类型
#include <stdio.h>
#include <string.h>
int main()
{
char s1[],s2[];
while(~scanf("%s",s1))
{
int f,t,i;
f=;
t=;
int l1=strlen(s1);
scanf("%s",s2);
int l2=strlen(s2);
for(i=; s1[i]!='\0'; i++)
if(s1[i]=='')
{
f++;
break;
}
for(i=; s2[i]!='\0'; i++)
if(s2[i]=='')
{
t++;
break;
}
if(l1==l2&&f&&t)
printf("YES\n");
else if(l1==l2&&!f&&!t)
printf("YES\n");
else
printf("NO\n");
} return ;
}
3360: 回文素数
Total Submit: 409 Accepted:95
Description
151 是一个回文素数,因为它既是一个素数又是回文数(回文数是指一个数 从左到右 和 从右到左 读的结果一样).
试写一个程序计算区间 [ a , b ] 内的所有回文素数.( 5 <= a < b <= 100,000,000 )
Input
只有一组测试数据: a b
Output
输出[a,b]区间内所有回文素数,每个数占一行
Sample Input
5 500
Sample Output
5
7
11
101
131
151
181
191
313
353
373
383
这个数不多的,我们可以去生成这些回文数啊,一半扫就可以了
素数的话预处理时间可能都不够
solution from kotae_chan
#include "bits/stdc++.h"
using namespace std;
int rev(int n)
{
int ans=,t=,nt=n;
while(nt)
{
ans=ans*+nt%;
t*=;
nt/=;
}
return ans+n/*t;
}
int ipm(int n)
{
if(n<)return ;
if(n==||n==)return ;
if(n%!=&&n%!=)return ;
for(int i=; i*i<=n; i++)
{
if(n%i==)return ;
}
return ;
}
int ans[]= {};
int main()
{
int n,pos=,i,a,b;
ans[]=;
for(i=; i<; i++)
if(ipm(rev(i)))ans[pos++]=rev(i);
scanf("%d%d",&a,&b);
sort(ans,ans+pos);
for(i=upper_bound(ans,ans+pos,a-)-ans; ans[i]<=b&&i<pos; i++)
printf("%d\n",ans[i]);
}
我的做法稍微麻烦些,就是去dfs这个字串,那么我可以预处理素数,让我代码更快
#include<stdio.h>
#include<string>
using namespace std;
int a,b,ans;
string c="";
bool pri(int p)
{
int i=;
if(p==)return ;
for(; i*i<=p; i+=)
if(!(p%i))
return ;
return ;
}
void DFS(int d,int t,string s)
{
if(d==t/+(t%) + )
{
int num=;
for(int i=; i<s.length(); i++) num=num*+(s[i]-'');
if(t%==) for(int i=s.length()-; i>=; i--) num=num*+(s[i]-'');
else for(int i=s.length()-; i>=; i--) num=num*+(s[i]-'');
if(a<=num&&num<=b&&pri(num)) printf("%d\n",num);
return;
}
for(int i=(d==)?:; i<=; i++)
{
if(d==&&i%==) continue;
string p=c.substr(i,);
DFS(d+,t,s+p);
}
}
int main()
{
scanf("%d%d",&a,&b);
int x=a,y=b,L=,R=;
while(x) x/=,L++;
while(y) y/=,R++;
for(int i=L; i<=R; i++) DFS(,i,"");
return ;
}
5279: 马拉松比赛
Total Submit: 65 Accepted:40
Description
有一块矩形的海域,其中有陆地也有海洋,这块海域是CSUFT_ACM集训队的训练基地,这一天,昌神说要集训队的队员不能总是训练,于是昌神提出了中南林ACM集训队第一场环陆马拉松比赛,顾名思义就是围绕着陆地的边缘跑步。现在昌神给你出了个问题:这个比赛最多需要跑多少距离。
注意,这块海域上可能有多块陆地,比赛的场地可能设在任何一块陆地上。
Input
多组输入,每组输入第一行给出两个数字R,C(1 ≤ R, C ≤ 50)。表示这组输入的01矩阵的行数和列数,接下来R行每行输入C个数字(0表示海水,1表示陆地),上下左右相连的陆地算作一块整的陆地。每个0或者1表示一个边长为1正方形。输入保证至少有一块陆地。
Output
输出陆地周长的最大值。里面的边长也要算在内,例如上图中有四块陆地,最长周长是12 + 4=16。第二长的周长是8,最小的周长是4。
Sample Input
1 1
1
6 5
01110
01010
01110
00000
01010
10011
Sample Output
4
16
这个题在我的认知里就是dfs就行的题,就是搜嘛,找到了就是多了边长4要扩展就是少了边长1
#include<stdio.h>
#include<string.h>
int vis[][];
char a[][];
int dir[][]= {,,-,,,-,,};
int s,ans,n,m;
void dfs(int x,int y)
{
if(x==||y==||x>n||y>m||a[x][y]==''||vis[x][y]==)
return;
s+=;
vis[x][y]=;
for(int i=; i<; i++)
{
int ax=x+dir[i][];
int ay=y+dir[i][];
if(a[ax][ay]=='')
{
s--;
if(vis[ax][ay])
dfs(ax,ay);
}
}
}
int main()
{
while(~scanf("%d%d",&n,&m))
{
getchar();
ans=;
memset(a,,sizeof(a));
memset(vis,,sizeof(vis));
for(int i=; i<=n; i++)
scanf("%s",a[i]+);
for(int i=; i<=n; i++)
for(int j=; j<=m; j++)
{
if(a[i][j]==''&&vis[i][j])
{
s=;
dfs(i,j);
if(s>ans)ans=s;
}
}
printf("%d\n",ans);
}
return ;
}
5149: FQ 的函数
Total Submit: 7 Accepted:6
Description
FQ 是个喜欢数学的孩子。有一天,FQ 发明了一个函数 FQ(n,p)。FQ(n,p)的值描述了 n!最多可以被 p 的多少次幂整除,其中 p 为一个素数。
举例来说,对于 FQ(8,3),我们要考查 8! = 8×7×6×5×4×3×2×1 = 40320。
很容易发现,它可以被 32 整除,但是不能被 3 3 整除。所以 FQ(8,3) = 2,表示 8!最多可以被 32 整除。
对 FQ(k,p)可以严格的定义: k!可被pFQ(k,p)整除,但是不能被pFQ(k,p)+1整除。
ZQ 对 FQ 的发现很感兴趣,但是他对 FQ 在这个函数的讨论中仅使用十进制表示不满。ZQ于是定义了ZQ(n,p)。其中n 是个p进制正整数,并且 ZQ(n,p)=FQ(n10 ,p)。其中n10表示 n 转换成十进制之后对应的数字。
本题的任务就是求出 ZQ(n,p)的值。注意:请将答案表示为十进制数。
Input
输入一个 T (T ≤ 50)表示 T 组数据。
每组测试数据占一行,是用空格分开的两个正两个整数 n,p。
数据保证:
(1) p≤16,并且 p 是素数。
(2) n 是一个 p 进制正整数,长度不超过105 。
(3) 在高于十进制的进制中,使用 A 表示 10,B 表示 11,C 表示 12,D表示 13,E 表示 14,F 表示 15。
Output
对于每组测试用例,输出一行,包含一个整数表示你的答案。请将答案表示为十进制数。另外,由于答案可能太大,你只需要输出答案模 1000000007 的余数。
Sample Input
2
11 2
1A1 11
Sample Output
1
22
Hint
样例第一组 112 = 310 ,而 3!=6,可以被 21 整除,但不能被 22 整除。
样例第二组 1A111 = 23210 ,232! 可以被 1122 整除,但是不能被 1123整除
这个题算是个数学题吧,自认为是这场比赛的防ak题,当时做了蛮久都没有解决。但是大家一顿操作猛如虎,给大家鼓掌
由于p是质数,不存在两个不同数字(非p倍数)乘起来是p的倍数。 那么就只要判断1~n里p的倍数的个数就好了。 1A1有00~1A个p的倍数(最低位保持0的情况),0~1个p的倍数(最低两位保持0的情况)。 所以枚举最低若干位为0,加起来即可
千万不要想10去解决问题,10不是素数啊,10的话有5就行了
但是这个数也是p进制的,它的倍数就是补0,所以就是给其1~(length-1)位补零,都是其贡献,所以可以O(n)解决
#include<bits/stdc++.h>
using namespace std;
const int MD=1e9+;
string s;
int main()
{
ios::sync_with_stdio(false),cin.tie(),cout.tie();
int T,p;
cin>>T;
while(T--)
{
cin>>s>>p;
__int64 t=,sum=;
for(int i=; s[i+]; i++)
t=(t*p%MD+(s[i]<=''?s[i]-'':s[i]-'A'+))%MD,sum=(sum+t)%MD;
cout<<sum<<"\n";
}
return ;
}
4841: FBI树
Total Submit: 26 Accepted:21
Description
我们可以把由“0”和“1”组成的字符串分为三类:全“0”串称为B串,全“1”串称为I串,既含“0”又含“1”的串则称为F串。
FBI树是一种二叉树1,它的结点类型也包括F结点,B结点和I结点三种。由一个长度为2^N的“01”串S可以构造出一棵FBI树T,递归的构造方法如下:
1) T的根结点为R,其类型与串S的类型相同;
2) 若串S的长度大于1,将串S从中间分开,分为等长的左右子串S1和S2;由左子串S1构造R的左子树T1,由右子串S2构造R的右子树T2。
现在给定一个长度为2^N的“01”串,请用上述构造方法构造出一棵FBI树,并输出它的后序遍历2序列。
Input
输入的第一行是一个整数N(0<=N<=10),第二行是一个长度为2^N的“01”串。
Output
输出包括一行,这一行只包含一个字符串,即FBI树的后序遍历序列。
Sample Input
3
10001011
Sample Output
IBFBBBFIBFIIIFF
Source
经典的二叉树,也是递归去实现,但是这个过程要思考起来比较麻烦,需要熟识二叉树的遍历。今年天梯赛有个专题的,可以去做一下
2018天梯赛第二次训练
#include <stdio.h>
#include <string.h>
char s[];
void fbi(int left,int right)
{
if(left>right) return ;
int mid=(left+right)/,B=,I=;
if(left!=right)
{
fbi(left,mid);
fbi(mid+,right);
}
while(left<=right) if(s[left++]=='') B++;
else I++;
if(B!=&&I!=) printf("F");
else if(I!=&&B==) printf("I");
else printf("B");
}
int main()
{
int n;
scanf("%d",&n);
getchar();
gets(s);
int l=strlen(s);
fbi(,l-);
return ;
}
集训队日常训练20181117 DIV2的更多相关文章
- 集训队日常训练20181124 DIV2
急急忙忙要出去比赛就拉了一场有点sb的题目 5202: 网络寻路 时间限制(普通/Java):1000MS/3000MS 内存限制:65536KByte总提交: 15 ...
- 集训队日常训练20181110 DIV2 题解及AC代码
4375: 孪生素数 Time Limit(Common/Java):1000MS/3000MS Memory Limit:65536KByteTotal Submit: 324 ...
- 集训队日常训练20181201 C 1003 : 种类数
时间限制(普通/Java):2000MS/6000MS 内存限制:65536KByte总提交: 8 测试通过:5 描述 一共有 n个数,第 i 个数是 xi ,其中xi ...
- 集训队日常训练20181201 E 1005 : 小蝌蚪
时间限制(普通/Java):500MS/1500MS 内存限制:65536KByte总提交: 25 测试通过:5 描述 有 n 个装着小蝌蚪的水缸排成一排,你拥有一个无限 ...
- 集训队日常训练20180525-DIV2
A.2295 求有多少素数对和等于n. 暴力. #include <bits/stdc++.h> using namespace std; int ss(int n) { ,a=sqrt( ...
- 集训队日常训练20180525-DIV1
A.2805 N*M的图,每次浇水(X1,Y1)-(X2,Y2)围成的矩形,问最后有多少点被浇水了. 暴力. #include<bits/stdc++.h> using namespace ...
- 集训队日常训练20180518-DIV2
A.3232 n个物品,换取要花积分,问刚好花完积分能换最大多少价值的物品. 多重背包. #include <bits/stdc++.h> using namespace std; ]; ...
- 集训队日常训练20180518-DIV1
A.3583 n根木棍是否能分成相等两堆. 背包dp,首先求和sum,如果为偶数就说明不行,否则考虑做一个sum/2大小的背包. #include<bits/stdc++.h> using ...
- 集训队日常训练20180513-DIV1
A.3132 给一个有向图,问能否从任意点出发都能进入一个环中. 深搜. #include<bits/stdc++.h> using namespace std; ; vector< ...
随机推荐
- git记录
2017-3-30:git常用命令:1.$ git init:初始化git仓库2.$ git add *.c:跟踪文件3.$ git commit -m 'initial project versio ...
- 打造颠覆你想象中的高性能,轻量级的webform框架---js直接调后台的封装(第三天)
如果你没有看我第二天写的内容的,我想你是看不懂的!!!! 好了,废话不多说,怎么才能让我们的代码变得牛逼起来呢?怎么封装我们的代码呢?我们不可能 每个页面都需要那样写吧,那我们来一步一步来封装 我们的 ...
- hdu-2112 HDU Today---dijkstra+标号
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2112. 题目大意: 求起点到终点的最短路 解题思路: 对地名进行编号即可 然后直接dijkstra算 ...
- 全面了解linux情况常用命令
查看linux服务器CPU详细情况1. 显示CPU个数命令 # cat /proc/cpuinfo | grep "physical id" | sort | uniq | wc ...
- Angular2--显示数据
1.插值表达式 要显示组件的属性,最简单的方式就是通过插值表达式来绑定属性名.要使用插值表达式,就把属性名包裹在双花括号里放进视图模板,如 {{}} eg: <h1>{{ name }}& ...
- Github的基本功能
著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处.作者:Fadeoc Khaos链接:http://www.zhihu.com/question/20070065/answer/30 ...
- Activiti学习记录(二)
1.初始化数据库 使用工作流引擎创建23张表 public class TestActiviti { /** * 使用代码创建工作流需要的23张表 */ @Test public void creat ...
- java算法面试题:有数组a[n],用java代码将数组元素顺序颠倒
package com.swift; import java.util.ArrayList; import java.util.Collections; import java.util.List; ...
- package.json字段分析
分析1.必须在包的顶层目录下2.二进制文件应该在bin目录下3.javascipt在lib目录下4.文档在doc目录下 package.json字段分析 name:包的名称,必须是唯一的,由小写英文字 ...
- pymysql模块操作数据库及连接报错解决方法
import pymysql sql = "select host,user,password from user" #想要执行的MySQL语句 #sql = 'create da ...