个人感受:这套题,题目泄露,没什么好打的,第一题刚开始题目理解错误,后来还行,第二道题,打了一个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. 使用CXF开发JAX-WS类型的WebService

    使用CXF记得要先加入CXF的jar包 方法1: Cxf编程实现: l 使用jaxwsServerFactoryBean发布 webservice服务端. 需要设置: jaxwsServerFacto ...

  2. CSS display和visibility的用法和区别

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt408 大多数人很容易将CSS属性display和visibility混淆,它 ...

  3. 入门-什么是webshell?

    webshell是什么? 顾名思义,"web" - 显然需要服务器开放web服务,"shell" - 取得对服务器某种程度上操作权限. webshell常常被称 ...

  4. 201521123083《Java程序设计》第四周学习总结

    [toc] 1. 本周学习总结 尝试使用思维导图总结有关继承的知识点. 2. 书面作业 1.注释的应用 使用类的注释与方法的注释为前面编写的类与方法进行注释,并在Eclipse中查看.(截图) 在这里 ...

  5. 201521123111《Java程序设计》第4周学习总结

    1. 本章学习总结 1.1 尝试使用思维导图总结有关继承的知识点. 1.2 使用常规方法总结其他上课内容. Answer: - 上课还讲了tostring的使用,般toString用于返回表示对象值的 ...

  6. 201521123087 《Java程序设计》第2周学习总结

    1.本周学习总结 类名第一个字母大写,类名下的方法如main第一个字母要小写: Java有三种基本数据类型:整型(byte,short,int,long,char),浮点型(float,double) ...

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

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

  8. java :instanceof用法

    Java中的instanceof是用来判断某个实例是不是某个类的实例. 例如:A instanceof B (A为某个实例,B为某个类名) 如果A为B的实例,则:(A instanceof B)==t ...

  9. 多线程面试题系列(2): CreateThread与_beginthreadex本质区别

    本文将带领你与多线程作第一次亲密接触,并深入分析CreateThread与_beginthreadex的本质区别,相信阅读本文后你能轻松的使用多线程并能流畅准确的回答CreateThread与_beg ...

  10. MySQL集群(二)之主主复制

    前面介绍了主从复制,这一篇我将介绍的是主主复制,其实听名字就可以知道,主主复制其实就是两台服务器互为主节点与从节点.接下来我将详细的给大家介绍,怎么去配置主主复制! 一.主从复制中的问题 1.1.从节 ...