博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BestCoder Round 70
阅读量:6167 次
发布时间:2019-06-21

本文共 3486 字,大约阅读时间需要 11 分钟。

惨败,不能再嘲笑别人了,否则自己也会像别人那样倒霉

HDU 5615:

求ax^2+bx+c能否拆成(px+k)(qx+m)的形式

不错的方法,原来的被hack了

1 #include 
2 #include
3 #include
4 #include
5 #include
6 #include
7 #include
8 9 #define rep(i,a,n) for(int i = a;i < n;i++)10 #define per(i,n,a) for(int i = n-1;i >=a;i--)11 #define pb push_back12 #define VI vector
13 #define QI queue
14 #define log2(N) log10(N)/log10(2)15 #define eps 1e-816 17 typedef long long ll;18 19 using namespace std;20 21 22 int main(){23 int T;24 scanf("%d",&T);25 while(T--){26 ll a,b,c,d;27 scanf("%I64d%I64d%I64d",&a,&b,&c);28 d = b*b - 4*a*c;29 if(d == (ll)sqrt(d)*(ll)sqrt(d)){30 puts("YES");31 }32 else{33 puts("NO");34 }35 } 36 return 0;37 }
View Code

HDU 5616:

01背包,记得要来回两次

另外为了简便用到了操作符或 0|0 = 0, 0|1 = 1, 1|1 = 1

1 #include 
2 #include
3 #include
4 #include
5 #include
6 #include
7 #include
8 9 #define rep(i,a,n) for(int i = a;i < n;i++)10 #define per(i,n,a) for(int i = n-1;i >=a;i--)11 #define pb push_back12 #define VI vector
13 #define QI queue
14 #define log2(N) log10(N)/log10(2)15 #define eps 1e-816 17 typedef long long ll;18 19 using namespace std;20 21 const int N = 20 + 5;22 const int MAXN = 2000 + 5;23 int n,sum;24 int a[N] = {};25 int dp[MAXN] = {};26 27 int main(){28 int T;29 scanf("%d",&T);30 while(T--){31 sum = 0;32 scanf("%d",&n);33 rep(i,0,n){34 scanf("%d",&a[i]);35 sum += a[i];36 } 37 memset(dp,0,sizeof(dp));38 dp[0] = 1;39 rep(i,0,n){40 per(j,sum+1,a[i]){41 dp[j] |= dp[j-a[i]];42 }43 }44 rep(i,0,n){45 rep(j,0,sum-a[i]+1){46 dp[j] |= dp[j+a[i]];47 }48 }49 int z;50 scanf("%d",&z);51 while(z--){52 int s;53 scanf("%d",&s);54 if(dp[s]){55 printf("YES\n");56 }57 else{58 printf("NO\n");59 }60 }61 } 62 return 0;63 }
View Code

HDU 5617:

学习的是的代码。赶紧记录一下。

写得还是糊里糊涂,希望牛人能再指导一下。

1 #include 
2 #include
3 #include
4 #include
5 #include
6 #include
7 #include
8 9 #define rep(i,a,n) for(int i = a;i <= n;i++)10 #define per(i,n,a) for(int i = n;i >= a;i--)11 #define pb push_back12 #define VI vector
13 #define QI queue
14 #define log2(N) log10(N)/log10(2)15 #define eps 1e-816 17 typedef long long ll;18 19 using namespace std;20 21 const int MOD = 5201314;22 const int MAXN = 500 + 5;23 char s[MAXN][MAXN] = {};24 int n;25 int dp[2][MAXN][MAXN] = {}; //第一个表示状态,第二个表示j横坐标,第三个表示k横坐标26 27 int main(){28 int T;29 scanf("%d",&T);30 while(T--){31 scanf("%d",&n);32 rep(i,0,n-1){33 scanf("%s",s+i); //s+i相当于s[i]34 } 35 memset(dp,0,sizeof(dp));36 if(s[0][0] != s[n-1][n-1]){ //如果左上角第一个和右下角最后一个不一样,直接输出037 puts("0");38 continue;39 } 40 dp[1][1][n] = 1; //先让起点和终点为141 rep(i,2,n){42 int a = i&1 ;int b = 1 - a; //可以产生两种状态,0和143 rep(j,1,i){44 per(k,n,n-i){45 if(s[j-1][i-j+1-1] == s[k-1][n-(i-(n-k))+1-1]){ //这步非常关键,估计也看的出来是在比较是否两个字母相同。其中n-(i-(n-k))最难理解,大牛写得更是看不懂,如果是我自己的话这样写就能推理出来了吧^_^46 dp[a][j][k] = (dp[b][j][k]+dp[b][j-1][k]+dp[b][j][k+1]+dp[b][j-1][k+1])%MOD; //分别把前后坐标时候的总数给加起来47 } 48 else{49 dp[a][j][k] = 0;50 }51 }52 }53 }54 55 int ans = 0;56 rep(i,1,n){57 (ans += dp[n&1][i][i])%=MOD; //假设分别是从两头开始出发的,当他们的横坐标都是i且相遇的时候的总数58 }59 printf("%d\n",ans);60 } 61 return 0;62 }
View Code

 

转载于:https://www.cnblogs.com/syuritsu/p/5175814.html

你可能感兴趣的文章
Android实训案例(三)——实现时间轴效果的ListView,加入本地存储,实现恋爱日记的效果!...
查看>>
phalapi-进阶篇2(DI依赖注入和单例模式)
查看>>
MySQL 5.7.5 : GTID_EXECUTED系统表
查看>>
Hybrid框架UI重构之路:四、分而治之
查看>>
【原创】Valgrind 基础
查看>>
Es6系列之destructuring assignments
查看>>
CSS ID选择器与CLASS选择器
查看>>
mysql 索引B-Tree类型对索引使用的生效和失效情况详解
查看>>
指针的看法
查看>>
Cocos-2d 坐标系及其坐标转换
查看>>
LAMP网站的CACHE机制概要
查看>>
[MySQL 5.6] 5.6新参数slave_rows_search_algorithms
查看>>
ESXi5.1嵌套KVM虚拟化环境支持配置
查看>>
爬虫的小技巧之–如何寻找爬虫入口
查看>>
JVM学习(二)垃圾收集器
查看>>
为hexo博客添加基于gitment评论功能
查看>>
java 库存 进销存 商户 多用户管理系统 SSM springmvc 项目源码
查看>>
Flutter - Drawer 抽屉视图与自定义header
查看>>
ERP系统的优势_库存管理软件开发
查看>>
如何内行地评价公链(一)从真正的不可能三角谈起
查看>>