2017.10.26水题大作战部分题解
感觉这一场的题目超纲了QWQ。。。
好难啊QWQ。。。。。。
A P2907 [USACO08OPEN]农场周围的道路Roads Around The Farm
为什么我感觉这题完全不像入门难度的题啊。。
我的思路是这样的
对于每一个n,k
解一个方程组使得
x-y=kx−y=k
x+y=nx+y=n
然后对于得到的x,y分别进行类似的操作
看起来挺简单,
但是我被精度卡了QWQ。。。。
1 #include<iostream>
2 #include<cstdio>
3 #include<cstring>
4 #include<cmath>
5 #include<stdlib.h>
6 #include<ctime>
7 using namespace std;
8 const int MAXN=0x7fffff;
9 const int INF=50;
10 inline int read()
11 {
12 char c=getchar();int f=1,x=0;
13 while(c<'0'||c>'9') {if(c=='-') f=-1;c=getchar();}
14 while(c>='0'&&c<='9') x=x*10+c-48,c=getchar();return x*f;
15 }
16 int ans=0;
17 void dfs(int n,int k)
18 {
19 double p=(double)(n+k)/2;
20 double q=(double)n-(n+k)/2;
21 int o=(n+k)/2;
22 double l=p-(double)o;
23 if(l!=0||p>=n&&q<=0||q>=n&&p<=0)
24 {
25 ans++;
26 return ;
27 }
28 dfs(p,k);dfs(q,k);
29 }
30 int main()
31 {
32 int n=read(),k=read();
33 dfs(n,k);
34 printf("%d",ans);
35 return 0;
36 }
B P1851 好朋友
亲和数
直接暴力计算就好
1 #include<iostream>
2 #include<cstdio>
3 #include<cstring>
4 #include<cmath>
5 #include<stdlib.h>
6 #include<ctime>
7 #define LL long long
8 using namespace std;
9 const LL MAXN=0x7fffff;
10 const LL INF=50;
11 inline LL read()
12 {
13 char c=getchar();LL f=1,x=0;
14 while(c<'0'||c>'9') {if(c=='-') f=-1;c=getchar();}
15 while(c>='0'&&c<='9') x=x*10+c-48,c=getchar();return x*f;
16 }
17 int main()
18 {
19 LL n=read();
20 while(n++)
21 {
22 LL p=n;
23 LL tot=0,tot2=0;
24 for(LL i=1;i<p;i++) if(p%i==0) tot+=i;
25 for(LL i=1;i<tot;i++) if(tot%i==0) tot2+=i;
26 if(p==tot2&&p!=tot)
27 { printf("%lld %lld",p,tot); exit(0); }
28
29 }
30 return 0;
31 }
C P1926 小书童——刷题大军
01背包,计算出最大的价值,可以推出时间
对于要做最多的题目,贪心计算
1 #include<iostream>
2 #include<cstdio>
3 #include<cstring>
4 #include<cmath>
5 #include<stdlib.h>
6 #include<ctime>
7 #include<algorithm>
8 using namespace std;
9 const int MAXN=151;
10 const int INF=50;
11 inline int read()
12 {
13 char c=getchar();int f=1,x=0;
14 while(c<'0'||c>'9') {if(c=='-') f=-1;c=getchar();}
15 while(c>='0'&&c<='9') x=x*10+c-48,c=getchar();return x*f;
16 }
17 int n,m,r,k;
18 int dp[MAXN][MAXN];
19 // 0 时间
20 // 1 分值
21 int ti[MAXN];
22 struct node
23 {
24 int time;
25 int val;
26 }hw[MAXN];
27 int main()
28 {
29 n=read();m=read();k=read();r=read();
30 for(int i=1;i<=n;i++) ti[i]=read();
31 for(int i=1;i<=m;i++) hw[i].time=read();
32 for(int i=1;i<=m;i++) hw[i].val=read();
33 for(int i=1;i<=m;i++)
34 for(int j=0;j<=r;j++)
35 if(j<hw[i].time) dp[i][j]=dp[i-1][j];
36 else dp[i][j]=max(dp[i-1][j],dp[i-1][j-hw[i].time]+hw[i].val);
37 int ans=0,totcnt=0;
38 sort(ti+1,ti+n+1);
39 for(int i=1;i<=m;i++)
40 for(int j=0;j<=r;j++)
41 if(dp[i][j]>=k)
42 totcnt=max(totcnt,r-j);
43 int tot=0;
44 int totnum=0;
45 for(int k=1;k<=n;k++)
46 if(ti[k]+tot<=totcnt)
47 tot+=ti[k],totnum++;
48 ans=max(ans,totnum);
49 printf("%d",ans);
50 return 0;
51 }
D P1496 火烧赤壁
按照左端点排序
维护最左端的值和最右端的值
1 #include<iostream>
2 #include<cstdio>
3 #include<cstring>
4 #include<cmath>
5 #include<stdlib.h>
6 #include<ctime>
7 #include<algorithm>
8 #define LL long long
9 using namespace std;
10 const LL MAXN=20001;
11 const LL INF=50;
12 inline LL read()
13 {
14 char c=getchar();LL f=1,x=0;
15 while(c<'0'||c>'9') {if(c=='-') f=-1;c=getchar();}
16 while(c>='0'&&c<='9') x=x*10+c-48,c=getchar();return x*f;
17 }
18 struct node
19 {
20 LL bg,ed;
21 }a[MAXN];
22 LL n;
23 LL comp(const node &a,const node &b)
24 {
25 return a.bg<b.bg;
26 }
27 LL ans;
28 LL nowleft,nowright;
29 int main()
30 {
31 n=read();
32 for(LL i=1;i<=n;i++)
33 {
34 a[i].bg=read(),a[i].ed=read();
35 if(a[i].bg>a[i].ed) swap(a[i].bg,a[i].ed);
36 }
37
38 sort(a+1,a+n+1,comp);
39 nowleft=a[1].bg,nowright=a[1].ed;
40 a[n+1].bg=1e10+10;
41 a[n+1].ed=1e10+20;
42 for(LL i=2;i<=n+1;i++)
43 {
44 if(a[i].bg<=nowright) nowright=max(nowright,a[i].ed);
45 else
46 {
47 ans+=abs(nowright-nowleft);
48 nowleft=a[i].bg;nowright=a[i].ed;
49 }
50 }
51 printf("%lld",ans);
52 return 0;
53 }
E P1302 可见矩形
不会做哈哈哈
#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<stdlib.h>#include<ctime>#define LL long long usingnamespacestd; const LL MAXN=0x7fffff; const LL INF=50; inline LL read() { char c=getchar();LL f=1,x=0; while(c<'0'||c>'9') {if(c=='-') f=-1;c=getchar();} while(c>='0'&&c<='9') x=x*10+c-48,c=getchar();return x*f; } int main() { LL n=read(); while(n++) { LL p=n; LL tot=0,tot2=0; for(LL i=1;i<p;i++) if(p%i==0) tot+=i; for(LL i=1;i<tot;i++) if(tot%i==0) tot2+=i; if(p==tot2&&p!=tot) { printf("%lld %lld",p,tot); exit(0); } } return0; }
- 安卓第二夜 有趣的架构
- spring-boot 速成(12) - 如何注入多个redis StringRedisTemplate
- Hadoop(八)Java程序访问HDFS集群中数据块与查看文件系统
- 简明 Git 命令速查表
- spring cloud 学习(8) - sleuth & zipkin 调用链跟踪
- 快速学习Bash
- JavaProblem之hashCode详解
- spring cloud 学习(6) - zuul 微服务网关
- ES6 Features系列:Template Strings & Tagged Template Strings
- 基于Tcp协议的简单Socket通信实例(JAVA)
- spring集成kafka
- Java常用类(二)String类详解
- 用树莓派玩转蓝牙
- CSS魔法堂:你真的理解z-index吗?
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 解决Linux常用命令“ll”失效或命令未找到的问题
- 手把手教你在腾讯云上搭建hive3.1.2的方法
- centos6超20TB磁盘的分区格式化的示例代码
- Linux 系统双网卡绑定配置实现
- Linux系统设置开机自动运行脚本的方法实例
- Linux中fuser命令用法详解
- 在Ubuntu中实现人脸识别登录的完整步骤
- Linux下如何寻找相同文件的方法
- CentOS 7中Nginx日志定时拆分实现过程详解
- 浅谈linux模拟多线程崩溃和多进程崩溃
- Linux下MongoDB的安装和配置教程
- Linux配置实现免密钥登录过程解析
- 可以提高效率的十个Linux命令别名汇总
- 基于linux命令提取文件夹内特定文件路径
- Ubuntu20.04修改ip地址的方法示例