八校联考第一场(20170917)

排列(permutation)
题目描述】
给定一个n*n 的矩阵f,你需要求出有多少个1~n 的排列x 满足对
于1<=i≠j<=n,均有f[i,j]=min(x[i],x[j]),并输出字典序最小的一个。
有多组数据。
【输入数据】
第一行一个整数t 表示数据组数。
每组数据第一行一个正整数n。接下来n 行每行n 个整数,第i
行第j 列的整数表示f[i,j]。
【输出数据】
对于每组数据,如果不存在这样的排列,输出一行一个整数-1。
否则输出两行,第一行一个整数表示排列个数对998244353 取模的结
果,第二行n 个整数表示字典序最小的排列。
【样例输入】
1 2
0 1
1 0
【样例输出】
2
1 2
【数据范围】
对于20%的数据,n<=8。
对于60%的数据,n<=40。
对于100%的数据,t<=10,∑n<=2000,f[i,i]=0,1<=f[i,j](i≠j)<=n。
各档数据中均有一半保证全部有解。
字符串(string)
【题目描述】
定义两个字符串A,B 相似当且仅当满足以下两个条件中的至少一
个:
(1)A 和B 相同;
(2)将A 分为长度相同的两个子串A0,A1,将B 分为长度相同的两
个子串B0,B1,满足A0 相似于B0,A1 相似于B1 或A0 相似于B1,
A1 相似于B0。
给定两个字符串S,T,问它们是否相似。
有多组数据。
【输入数据】
第一行一个整数t 表示数据组数。
每组数据第一行一个字符串S,第二行一个字符串T,保证它们
长度相同。
【输出数据】
每组数据一行,若相似输出YES,不相似输出NO。
【样例输入】
2
abab
baab
aabb
abab
【样例输出】
YES
NO
【数据范围】
对于30%的数据,|S|<=30。
对于60%的数据,|S|<=100。
对于100%的数据,t<=30,∑|S|<=500000。
数(number)
【题目描述】
给定正整数n,m,问有多少个正整数满足:
(1)不含前导0;
(2)是m 的倍数;
(3)可以通过重排列各个数位得到n。
【输入数据】
一行两个整数n,m。
【输出数据】
一行一个整数表示答案对998244353 取模的结果。
【样例输入】
1 1
【样例输出】
1
【数据范围】
对于20%的数据,n<10^10。
对于50%的数据,n<10^16,m<=20。
对于100%的数据,n<10^20,m<=100。

就这样三道题,我也不知道说些sm好,第一题死磕半天,埃,最后还不知道正确性,

脑子是越来越没用了,不开窍的时候sm都想不出来,不知道怎么办好,

第一题搞了半天,打到10点半,剩下就一个小时第二第三题,然后都写了写暴力。

这次为什么这么差,原因在于:

  1. 开始没有先将题目看完。
  2. 第一题复杂化,没有换种思路,死磕。
  3. 没有很好的心态,和做题太少。
  4. 草稿纸不够。
  5. 错误方法还去实现,浪费大量时间。

还好这次不是提高组,不然绝对挂惨,幸运的是提前发现了错误,可以总结许多,学会许多。

T1:就是每次找当前这一行的最大上界,就是a1,

  然后按这样方法,找a2,。。。,an为止,特判1情况,然后没了。

T2:暴力,自己傻傻没开大数据范围。

T3:数位dp

下面是第一次的代码

T1

  1 #include<cstdio>
  2 #include<iostream>
  3 #include<algorithm>
  4 #include<cmath>
  5 #include<cstring>
  6 #define N 2007
  7 #define LL long long
  8 #define mod 998244353
  9 using namespace std;
 10
 11 int n,cnt;
 12 int a[N][N];
 13 int boo[N],ans[N],ckt[N];
 14
 15 struct Node
 16 {
 17     int l,r,num;
 18 }tr[N];
 19
 20 LL PL(int x)
 21 {
 22     LL res=1;
 23     for (int i=1;i<=x;i++)
 24         res=res*i%mod;
 25     return res;
 26 }
 27 int main()
 28 {
 29     freopen("permutation.in","r",stdin);
 30     freopen("permutation.out","w",stdout);
 31
 32     int cas;scanf("%d",&cas);
 33     while(cas--)
 34     {
 35         scanf("%d",&n);
 36         for (int i=1;i<=n;i++)
 37             for (int j=1;j<=n;j++)
 38                 scanf("%d",&a[i][j]);
 39         bool flag=false;
 40         for (int i=1;i<=n;i++)
 41             for (int j=i+1;j<=n;j++)
 42                 if (a[i][j]!=a[j][i])
 43                 {
 44                     flag=true;
 45                     break;
 46                 }
 47         if (flag)
 48         {
 49             printf("-1\n");
 50             continue;
 51         }
 52         for (int i=1;i<=n;i++)
 53             boo[i]=1;
 54         for (int i=1;i<=n;i++)
 55             for (int j=i+1;j<=n;j++)
 56                 boo[i]=max(boo[i],a[i][j]),boo[j]=max(boo[j],a[i][j]);
 57
 58         memset(ckt,0,sizeof(ckt));
 59         int zhi[N]={0};
 60         for (int i=1;i<=n;i++)
 61             zhi[boo[i]]++;
 62         for (int i=1;i<=n-2;i++)
 63             if (zhi[i]!=1)
 64             {
 65                 flag=1;
 66             }
 67         if (zhi[n]==2) flag=1;
 68         for (int i=1;i<=n;i++)
 69         {
 70             int fzy=0;
 71             for (int j=boo[i];j<=n;j++)
 72                 if (ckt[j]==0)
 73                 {
 74                     ckt[j]=1;
 75                     ans[i]=j;
 76                     fzy=1;
 77                     break;
 78                 }
 79             if (!fzy)
 80             {
 81                 flag=1;
 82                 break;
 83             }
 84         }
 85         if (flag) printf("-1\n");
 86         else
 87         {
 88             int fzy=0;
 89             for (int i=1;i<=n;i++)
 90                 if(boo[i]==n)
 91                 {
 92                     fzy=1;
 93                     break;
 94                 }
 95             if (fzy==0) cout<<2<<endl;
 96             else cout<<1<<endl;
 97             for (int i=1;i<n;i++)
 98                 cout<<ans[i]<<" ";
 99             cout<<ans[n]<<endl;
100         }
101     }
102 }

T2

 1 #include<cstdio>
 2 #include<algorithm>
 3 #include<iostream>
 4 #include<cmath>
 5 #include<cstring>
 6
 7 using namespace std;
 8
 9 char c1[107],c2[107];
10
11 bool dfs(int l1,int r1,int l2,int r2)
12 {
13     int flag=0;
14     for (int i=0;i<=r1-l1;i++)
15         if (c1[i+l1]!=c2[i+l2])
16         {
17             flag=1;
18             break;
19         }
20     if (!flag) return true;
21     if (l1==r1||(r1-l1+1)%2==1) return false;
22     int up=(r1-l1)/2;
23     if (dfs(l1,l1+up,l2,l2+up)&&dfs(l1+up+1,r1,l2+up+1,r2)) return true;
24     if (dfs(l1,l1+up,r2-up,r2)&&dfs(l1+up+1,r1,l2,r2-up-1)) return true;
25     return false;
26 }
27 int main()
28 {
29     freopen("string.in","r",stdin);
30     freopen("string.out","w",stdout);
31
32     int cas;scanf("%d",&cas);
33     while (cas--)
34     {
35         scanf("%s%s",c1,c2);
36         int len=strlen(c1);
37         for (int i=len;i>=1;i--)
38             c1[i]=c1[i-1],c2[i]=c2[i-1];
39         if (dfs(1,len,1,len)) printf("YES\n");
40         else printf("NO\n");
41     }
42 }

T3

 1 #include<cstdio>
 2 #include<algorithm>
 3 #include<cmath>
 4 #include<cstring>
 5 #include<iostream>
 6 #include<map>
 7 #define LL long long
 8
 9 using namespace std;
10
11 map<LL,bool>p;
12
13 LL n,m,cnt,ans;
14 LL a[107],boo[107];
15
16 void dfs(LL now,int ci)
17 {
18     if (ci==cnt)
19     {
20         if (now%m==0)
21         {
22             if (!p[now]) ans++;
23             p[now]=1;
24         }
25         return;
26     }
27     for (int i=1;i<=cnt;i++)
28         if (!boo[i])
29         {
30             if (now==0&&a[i]==0) continue;
31             boo[i]=1;
32             dfs(now*10+a[i],ci+1);
33             boo[i]=0;
34         }
35 }
36 int main()
37 {
38     freopen("number.in","r",stdin);
39     freopen("number.out","w",stdout);
40
41     scanf("%lld%lld",&n,&m);
42     cnt=0;
43     while(n)
44     {
45         a[++cnt]=n%10;
46         n/=10;
47     }
48     ans=0;
49     memset(boo,0,sizeof(boo));
50     dfs(0,0);
51     printf("%lld",ans);
52 }

对于这么一个特别的日子,没考好真的。。。。

时间: 2024-08-01 12:14:31

八校联考第一场(20170917)的相关文章

八校联考第二场(二试)(20170924)

NOIP 信心赛zzq题目名称函数排列数字串代码文件名func perm num输入文件名func.in perm.in num.in输出文件名func.out perm.out num.out时间限制1s 2s 2s空间限制512MB 512MB 512MB子任务分值10 20 30 40 10 20 20 10 40 20 30 30 20题目类型传统传统传统比较方式全文比较(忽略行末空格和文末换行)全文比较(忽略行末空格和文末换行)全文比较(忽略行末空格和文末换行)1. 题目难度和顺序大致

[jzoj]3875.【NOIP2014八校联考第4场第2试10.20】星球联盟(alliance)

Link https://jzoj.net/senior/#main/show/3875 Problem 在遥远的S星系中一共有N个星球,编号为1…N.其中的一些星球决定组成联盟,以方便相互间的交流. 但是,组成联盟的首要条件就是交通条件.初始时,在这N个星球间有M条太空隧道.每条太空隧道连接两个星球,使得它们能够相互到达.若两个星球属于同一个联盟,则必须存在一条环形线路经过这两个星球,即两个星球间存在两条没有公共隧道的路径. 为了壮大联盟的队伍,这些星球将建设P条新的太空隧道.这P条新隧道将按

多校联考九场总结

总算考完了九套试题,天天早上坐五个小时,下午都会头痛的要死QAQ 不过考的貌似不错? 九场平均分 215.78 数一数考场上没有1A的题目吧(不算有毒的OJ卡我常数): 1.超立方体 QAQ 当时并不会FWT,矩阵乘法搞出系数来之后只能暴力贡献 然后输入的时候没有直接取模爆了long long,于是暴力也被炸飞了 后来学了FWT发现是水题 2.IP地址 没有使用合适的转化询问的方式 使得这道题目可以用打标记的方式来做 转化的一些经典方式:差分,叶节点查询转化为链求和,区间可减性查询转化为前缀查询

10.29 FJ四校联考

//四校联考Rank 16 感觉很滋磁 (虽然考的时候抱怨厦门一中出的数学题很NOIP///) 圈地 [问题描述] n根长度不一定相同的木棍,至多可以对其中一根切一刀,然后用其中的任意根围一个三角形,求三角形的最大面积.设面积为S,输出16*S^2对998244353取模后的答案.特别地,无解输出-1. 注:退化的三角形(面积为零)不被认为是三角形,答案应该为-1. [输入文件] 输入文件为tri.in. 输入文件第一行包含两个正整数n和998244353. 第二行包含n个正整数,表示每根木棍的

【BZOJ5251】【八省联考2018】劈配(网络流,二分答案)

[BZOJ5251][八省联考2018]劈配(网络流,二分答案) 题面 洛谷 BZOJ Description 一年一度的综艺节目<中国新代码>又开始了. Zayid从小就梦想成为一名程序员,他觉得这是一个展示自己的舞台,于是他毫不犹豫地报名了. 题目描述 轻车熟路的Zayid顺利地通过了海选,接下来的环节是导师盲选,这一阶段的规则是这样的: 总共n名参赛选手(编号从1至n)每人写出一份代码并介绍自己的梦想.接着由所有导师对这些选手进行排名. 为了避免后续的麻烦,规定不存在排名并列的情况. 同

HDU 4864 Task (贪心+STL多集(二分)+邻接表存储)(杭电多校训练赛第一场1004)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4864 解题报告:有n台机器用来完成m个任务,每个任务有一个难度值和一个需要完成的时间,每台机器有一个可以工作的最长时间和一个可以完成的任务的难度的最大值, 一台机器能完成一个任务的条件是这台机器的最长工作时间和能完成任务的难度值必须都大于等于这个任务,而且一台机器最多完成一个任务,假设一个任务的时间为t,难度值为x,那么完成这个任务可以赚到的钱 money = 500 * t + 2 * x; 现在

2014多校联合训练第一场(组队训练)

这是我.potaty.lmz第二次训练,毕竟经验不足,加上水平不够,导致我们各种被碾压. A - Couple doubi: 这道题是道比较水的数论.但我们都没想出来要怎么做.后来是potaty提议打个表看看,然后lmz打出表后发现了规律.我还没细看,待研究后再补全. D - Task: 这道题一看就知道是个贪心(现在只要是有deadline的题我都觉得是贪心了).虽然想出来了,但还是不会严格证明为什么只要取满足task的且y最小(y相等时x最小)的machine就行了. 我的做法是把所有mac

九校联考 终&amp;启

one term's ending... class:12 school:130...130...130... 至今没有看到九校的排名,如果九校排名正常的话,那yyhs的学生也太可怕了...估计要三百开外了 语文是比较意外的分数,尽管选择题做得差,可是有史以来第一次下110....why 数学和英语都比预估的低. 政史地84 65 78,感觉最对不起历史老师...地理从来没好过. 物化技82 75 83,是时候改课了..... 明明下半学期一直在学文化课...现在连浙大线都考不上了.... 学考

[八省联考2018] 劈配

题目背景 一年一度的综艺节目<中国新代码>又开始了.Zayid 从小就梦想成为一名程序员,他觉得这是一个展示自己的舞台,于是他毫不犹豫地报名了. 题目描述 轻车熟路的Zayid 顺利地通过了海选,接下来的环节是导师盲选,这一阶段的规则是这样的: 总共n 名参赛选手(编号从1 至n)每人写出一份代码并介绍自己的梦想.接着 由所有导师对这些选手进行排名.为了避免后续的麻烦,规定不存在排名并列的情况. 同时,每名选手都将独立地填写一份志愿表,来对总共 m 位导师(编号从 1 至 m)作出评价.志愿表