个人感受:这套题,题目泄露,没什么好打的,第一题刚开始题目理解错误,后来还行,第二道题,打了一个50还是60分的dp,第三道暴力过了小数据,拿了200分,排名15+。

问题 A: 七天使的通讯

时间限制: 2 Sec  内存限制: 256 MB
提交: 427  解决: 126
[提交][状态][讨论版]

题目描述

n个天使排成一条直线,某些天使之间需要互相联系,他们之间的通讯可以通过黑白两种通道中的一种;所有通道必须在直线同侧(另一侧是地面);为了保证通讯效率,同种颜色的所有通道之间不能相交。请计算能否建立这种通讯方案。

输入

    第一行一个数T,表示接下来有T个询问。
    对于每个询问:第一行两个数n,m,分别表示有n个天使、需要建立通讯线路的天使有m对;接下来有m行,每行两个数a、b,表示a、b两个天使需要通讯。

输出

对于每个询问,输出一行“sane”表示有可行方案、“non”表示无解

样例输入

1
7 5
1 3
2 7
3 4
7 4
6 5

样例输出

sane

提示

【样例解释】

样例中共有一个询问。



在(1,3)、(4,7)、(5,6)之间连黑色通道,在(2,7)、(3,4)之间连白色通道,每条通道都成功建立,且同种颜色的通道没有相交,所以输出sane。

【数据规模和约定】

对于 20%的数据,1<=n<=50,1<=m<=15

对于
50%的数据,1<=n<=1000,1<=m<=300

对于
100%的数据,1<=n<=5000,1<=m<=1000,1<=T<=10,1<=a<=n,1<=b<=n

数据保证每对(a,b)不重复,且a不等于b

【提示】

当两条线路有一对相同的端点时,这两条线路不相交。

也就是说,对于线路(a,b)和线路(c,d)(a<b且c<d),当且仅当a<c<b<d或者c<a<d<b时这两条线路相交。

这题比较水吧,黑白染色法就可以过了,因为通道不能相较,输入的时候就判断,然后连边就可以了。

 #include<cstdio>
 #include<iostream>
 #include<algorithm>
 #include<cmath>
 #include<cstring>
 #include<string>
 using namespace std;  

 ];
 ],next[],rea[];
 struct fzy
 {
     int l,r;
 }a[]; 

 bool check(int i,int j)
 {
     ;
     ;
     ;
     ;
 }
 void add(int u,int v)
 {
     cnt++;
     next[cnt]=head[u];
     head[u]=cnt;
     rea[cnt]=v;
 }
 void dfs(int u)
 {
     ;i=next[i])
     {
         int v=rea[i];
         )
         {
             color[v]=color[u]^;
             dfs(v);
         }
     }
 }
 int main()
 {
     scanf("%d",&CAS);
     while (CAS--)
     {
         cnt=;
         memset(head,-,sizeof(head));
         memset(color,-,sizeof(color));
         scanf("%d%d",&n,&m);
         ;i<=m;i++)
         {
             scanf("%d%d",&a[i].l,&a[i].r);
             if (a[i].l>a[i].r) swap(a[i].l,a[i].r);
             ;j<i;j++)
                 if (check(i,j))
                 {
                     add(i,j);
                     add(j,i);
                 }
         }
         ;i<=m;i++)
             )
             {
                 color[i]=;
                 dfs(i);
             }
         ;
         ;i<=m;i++)
         {
             ;j=next[j])
             {
                 int u=i,v=rea[j];
                 if (color[u]==color[v])
                 {
                     flag=;
                     break;
                 }
             }
             ) break;
         }
         ) printf("non\n");
         else printf("sane\n");
     }
 } 

都市环游

时间限制: 1 Sec  内存限制: 512 MB
提交: 262  解决:
93
[提交][状态][讨论版]

题目描述

因为SJY干的奇怪事情过多,SJY收到了休假的通知,于是他准备在都市间来回旅游。SJY有一辆车子,一开始行驶性能为0,每过1时间行驶性能就会提升1点。每个城市的道路都有性能要求。SJY一共有t时间休息,一开始他位于1号城市(保证1号城市道路要求为0),他希望在n号城市结束旅程。每次穿过一条城市间的路会花费1时间,当然他也可以停留在一个城市不动而花费1时间。当且仅当车子的行驶性能大于等于一个城市,我们才能到达那里。SJY希望知道,旅游的方案模10086后的答案。(只要在某一时刻通过的道路存在一条不相同,就算不同的方案)

输入

    第一行三个数n,m,t,表示有n个城市m条道路t时间。
    第二行n个数,hi表示第i个城市的道路性能要求。
第三到m+2行,每行两个数u,v,表示城市u与城市v之间有一条单向道路连接(可能有重边)。

输出

包括一个数字,表示旅游的方案模10086。

样例输入

5 17 7
0 2 4 5 3
1 2
2 1
1 3
3 1
1 4
4 1
4 5
5 4
5 3
4 1
2 1
5 3
2 1
2 1
1 2
2 1
1 3

样例输出

245

提示

【数据规模和约定】
    对于20%的数据,n<=10,t<=80;
    对于50%的数据,n<=30,t<=80;
    对于100%的数据,n<=70,m<=1000,t<=100000000,hi<=70。

花了10分钟左右打了一个dp,拿了50分,后来发现hi<=70后来想到了快速幂,矩阵乘法,就可以了,到所有路径的方案数是确定的。

 #include<cstdio>
 #include<algorithm>
 #include<iostream>
 #include<cmath>
 #include<cstring>
 using namespace std;
 ;
 ; 

 int n,m,t;
 },f[NN][NN]={},road[NN][NN]={};
 }; 

 void solve(int num)
 {
     ;i<NN;i++)
         fzy[i][i]=;
     while (num)
     {
         };
         ==)
         {
             ;i<=n;i++)
                 ;j<=n;j++)
                     ;k<=n;k++)
                         xx[i][j]=(xx[i][j]+fzy[i][k]*road[k][j])%MOD;
             ;i<=n;i++)
                 ;j<=n;j++)
                     fzy[i][j]=xx[i][j];
         }
         memset(xx,,sizeof(xx));
         ;i<=n;i++)
             ;j<=n;j++)
                 ;k<=n;k++)
                     xx[i][j]=(xx[i][j]+road[i][k]*road[k][j])%MOD;
         ;i<=n;i++)
             ;j<=n;j++)
                 road[i][j]=xx[i][j];
         num/=;
     }
     ;i<=n;i++)
         ;j<=n;j++)
             ) f[][j]=(f[][j]+f[][i]*fzy[i][j])%MOD;
     printf(][n]);
 }
 int main()
 {
     scanf("%d%d%d",&n,&m,&t);
     ;i<=n;i++)
         scanf("%d",&a[i]);
     int x,y;
     ;i<=m;i++)
     {
         scanf("%d%d",&x,&y);
         road[x][y]++;
     }
     ;i<=n;i++)
         road[i][i]++;
     f[][]=;
     ;i<=;i++)
         ;j<=n;j++)
             ;k<=n;k++)
                 ) f[i][k]=(f[i][k]+f[i-][j]*road[j][k])%MOD;
     ) printf("%d\n",f[t][n]);
     ); 

 } 

大水题

时间限制: 1 Sec  内存限制: 512 MB
提交: 204  解决:
27
[提交][状态][讨论版]

题目描述

    dzy 定义一个n^2
位的数的生成矩阵A 为一个大小为n*n
且Aij
为这个数的第i*n+j-n位的矩阵。
现在dzy 有一个数n^2
位的数k,他想知道所有小于等于k
的数的n*n
生成矩阵有多少种。(如果不足n^2 位则补前缀零)

输入

第一行一个数n,第二行一个n^2 位的数k

输出

仅一行表示答案,答案可能很大,你只需输出答案对10^9 + 7 取模后的结果。

样例输入

2
1000

样例输出

954

提示

【数据规模和约定】 
对于30% 的数据n<=2
对于100% 的数据n
<=1000,且n为偶数
【提示】
    如果两个生成矩阵在其中一个旋转180
度后可以重叠,则称这两个矩阵是相同的。

30分的代码好打,但是满分的数位dp难想。

NOIP2017SummerTraining0710的更多相关文章

随机推荐

  1. JS面向对象编程(进阶理解)

    JS 面向对象编程 如何创建JS对象 JSON语法声明对象(直接量声明对象) var obj = {}; 使用 Object 创建对象 var obj = new Object(); JS对象可以后期 ...

  2. SVG图案

    前面的话 给SVG元素应用填充和描边,除了使用纯色和渐变外,还可以使用图案.本文将详细介绍SVG图案 概述 <pattern>可以实现重复的效果,在canvas中被翻译为模式,而在SVG中 ...

  3. 微信公众平台接口调用第一步(获取access_token)

    最近公司需要开发微信公众号,闲着无聊就写写博客,希望能帮到你我 上代码: package test; import java.util.List; import java.util.ArrayList ...

  4. YYHS-挑战nbc

    题目描述 Abwad是一名有志向的优秀OI少年.遗憾的是,由于高能宇宙射线的影响,他不幸在NOI中滚粗.不过,Abwad才高一,还有许许多多的机会.在长时间的刻苦学习之后,他实力大增,并企图撼动OI界 ...

  5. grunt对象之api

    grunt已经扯了七篇了,殊为不易.最后一篇扯点早应该提及的东西,就是module.exports = function(grunt) {}传入的这个grunt.之前的代码grunt一般只出现在Gru ...

  6. Markdown(editormd)语法解析成html

    我们在一些网站中可以见到一款网页编辑器--markdown: 这是一款功能强大的富文本编辑器,之前自己在网页上使用的时候遇到了一点点的问题,现在跟大家分享下 在我们写了文章之后是需要将内容保存到数据库 ...

  7. 第二次作业——个人项目实战(Sudoku)

    Github:Sudoku 项目相关要求 利用程序随机构造出N个已解答的数独棋盘 . 输入 数独棋盘题目个数N 输出 随机生成N个 不重复 的 已解答完毕的 数独棋盘,并输出到sudoku.txt中, ...

  8. 201521123118《java程序与设计》第七次作业

    1. 本周学习总结 以你喜欢的方式(思维导图或其他)归纳总结集合相关内容. 2. 书面作业 1. ArrayList代码分析 1.1 解释ArrayList的contains源代码 public bo ...

  9. Java课程设计——学生信息系统(团队)

    团队名称.团队成员介绍 1.1 团队名称 1.2 团队成员 高可心 网络1514 201521123097 组长 黄滢滢 网络1514 201521123095 组员 2.项目git地址 http:/ ...

  10. 201521123053《Java程序设计》第十二周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 一些有关流与文件的知识点: 1. 字节缓冲流: BufferedInputStream(FileInputSt ...