个人感受:这套题,题目泄露,没什么好打的,第一题刚开始题目理解错误,后来还行,第二道题,打了一个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. webstom,zencoding,windows快捷键

    1.webstorm快捷键: IntelliJ-Idea 的快捷键 Ctrl+/ 或 Ctrl+Shift+/ 注释(// 或者/*…*/ ) Shift+F6 重构-重命名 Ctrl+X 删除行 C ...

  2. TC358775XBG:MIPI DSI转双路LVDS芯片简介

    TC358775XBG是一颗MIPI DSI转双路LVDS芯片,通信方式:IIC/MIPI command mode,分辨率1920*1200,封装形式:BGA64.

  3. 利用 FormData 对象和 Spring MVC 配合可以实现Ajax文件上载功能

    Ajax文件上载 利用 FormData 对象和 Spring MVC 配合可以实现Ajax文件上载功能: 步骤 导入组件并准备静态脚本 <dependency> <groupId& ...

  4. 向GitHub 提交你的源代码

    之前的这篇文章「Git入门篇」相信大家都已经对 Git 的基本操作熟悉了,但是这篇文章只介绍了对本地 Git 仓库的基本操作,今天我就来介绍下如何跟远程仓库一起协作,教你们向 GitHub 上提交你们 ...

  5. JavaScript--我发现,原来你是这样的JS(基础概念--躯壳,不妨从中文角度看js)

    介绍 这是红宝书(JavaScript高级程序设计 3版)的读书笔记第二篇(基础概念--躯壳篇),有着部分第三章的知识内容,当然其中还有我个人的理解.红宝书这本书可以说是难啃的,要看完不容易,挺厚的, ...

  6. C#设计模式(5)-建造者模式

    引言 上一篇介绍了设计模式中的抽象工厂模式-C#设计模式(3)-抽象工厂模式,本篇将介绍建造者模式: 点击这里查看全部设计模式系列文章导航 建造者模式简介 建造者模式是将一个复杂对象的构建与表示分离, ...

  7. poj 3613 floyd + 快速幂

    题意:本题的大意就是问从S 到 T 经过边得个数恰为k的最短路是多少. 思路:对于邻接矩阵每一次floyd求的是每个点间的最短距离,则n次floyd就是每个点间n条路的最短距离(可以重复边); 但是由 ...

  8. 如何写SysV服务管理脚本

    本文目录: 1.1 SysV脚本的特性1.2 SysV脚本要具备的能力1.3 start函数分析1.4 stop函数分析1.5 reload函数分析1.6 status.restart.force-r ...

  9. JS学习五(js中的事件)

    [JS中的事件分类] 1.鼠标事件 click/bdlclick/onmouseover/onmouseout 2. HTML事件 onload/onscroll/onsubmit/onchange/ ...

  10. 201521123083《Java程序设计》第12周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 书面作业 将Student对象(属性:int id, String name,int age,doubl ...