BestCoder Round 70
惨败,不能再嘲笑别人了,否则自己也会像别人那样倒霉
求ax^2+bx+c能否拆成(px+k)(qx+m)的形式
不错的方法,原来的被hack了
#include <cstdio>
#include <iostream>
#include <cmath>
#include <cstring>
#include <queue>
#include <vector>
#include <algorithm> #define rep(i,a,n) for(int i = a;i < n;i++)
#define per(i,n,a) for(int i = n-1;i >=a;i--)
#define pb push_back
#define VI vector<int>
#define QI queue<int>
#define log2(N) log10(N)/log10(2)
#define eps 1e-8 typedef long long ll; using namespace std; int main(){
int T;
scanf("%d",&T);
while(T--){
ll a,b,c,d;
scanf("%I64d%I64d%I64d",&a,&b,&c);
d = b*b - *a*c;
if(d == (ll)sqrt(d)*(ll)sqrt(d)){
puts("YES");
}
else{
puts("NO");
}
}
return ;
}
01背包,记得要来回两次
另外为了简便用到了操作符或 0|0 = 0, 0|1 = 1, 1|1 = 1
#include <cstdio>
#include <iostream>
#include <cmath>
#include <cstring>
#include <queue>
#include <vector>
#include <algorithm> #define rep(i,a,n) for(int i = a;i < n;i++)
#define per(i,n,a) for(int i = n-1;i >=a;i--)
#define pb push_back
#define VI vector<int>
#define QI queue<int>
#define log2(N) log10(N)/log10(2)
#define eps 1e-8 typedef long long ll; using namespace std; const int N = + ;
const int MAXN = + ;
int n,sum;
int a[N] = {};
int dp[MAXN] = {}; int main(){
int T;
scanf("%d",&T);
while(T--){
sum = ;
scanf("%d",&n);
rep(i,,n){
scanf("%d",&a[i]);
sum += a[i];
}
memset(dp,,sizeof(dp));
dp[] = ;
rep(i,,n){
per(j,sum+,a[i]){
dp[j] |= dp[j-a[i]];
}
}
rep(i,,n){
rep(j,,sum-a[i]+){
dp[j] |= dp[j+a[i]];
}
}
int z;
scanf("%d",&z);
while(z--){
int s;
scanf("%d",&s);
if(dp[s]){
printf("YES\n");
}
else{
printf("NO\n");
}
}
}
return ;
}
学习的是NANOAPE的代码。赶紧记录一下。
写得还是糊里糊涂,希望牛人能再指导一下。
#include <cstdio>
#include <iostream>
#include <cmath>
#include <cstring>
#include <queue>
#include <vector>
#include <algorithm> #define rep(i,a,n) for(int i = a;i <= n;i++)
#define per(i,n,a) for(int i = n;i >= a;i--)
#define pb push_back
#define VI vector<int>
#define QI queue<int>
#define log2(N) log10(N)/log10(2)
#define eps 1e-8 typedef long long ll; using namespace std; const int MOD = ;
const int MAXN = + ;
char s[MAXN][MAXN] = {};
int n;
int dp[][MAXN][MAXN] = {}; //第一个表示状态,第二个表示j横坐标,第三个表示k横坐标 int main(){
int T;
scanf("%d",&T);
while(T--){
scanf("%d",&n);
rep(i,,n-){
scanf("%s",s+i); //s+i相当于s[i]
}
memset(dp,,sizeof(dp));
if(s[][] != s[n-][n-]){ //如果左上角第一个和右下角最后一个不一样,直接输出0
puts("");
continue;
}
dp[][][n] = ; //先让起点和终点为1
rep(i,,n){
int a = i& ;int b = - a; //可以产生两种状态,0和1
rep(j,,i){
per(k,n,n-i){
if(s[j-][i-j+-] == s[k-][n-(i-(n-k))+-]){ //这步非常关键,估计也看的出来是在比较是否两个字母相同。其中n-(i-(n-k))最难理解,大牛写得更是看不懂,如果是我自己的话这样写就能推理出来了吧^_^
dp[a][j][k] = (dp[b][j][k]+dp[b][j-][k]+dp[b][j][k+]+dp[b][j-][k+])%MOD; //分别把前后坐标时候的总数给加起来
}
else{
dp[a][j][k] = ;
}
}
}
} int ans = ;
rep(i,,n){
(ans += dp[n&][i][i])%=MOD; //假设分别是从两头开始出发的,当他们的横坐标都是i且相遇的时候的总数
}
printf("%d\n",ans);
}
return ;
}
BestCoder Round 70的更多相关文章
- BestCoder Round #70 Jam's math problem(hdu 5615)
Problem Description Jam has a math problem. He just learned factorization. He is trying to factorize ...
- hdu5634 BestCoder Round #73 (div.1)
Rikka with Phi Accepts: 5 Submissions: 66 Time Limit: 16000/8000 MS (Java/Others) Memory Limit: ...
- BestCoder Round #89 02单调队列优化dp
1.BestCoder Round #89 2.总结:4个题,只能做A.B,全都靠hack上分.. 01 HDU 5944 水 1.题意:一个字符串,求有多少组字符y,r,x的下标能组成等比数列 ...
- BestCoder Round #90 //div all 大混战 一题滚粗 阶梯博弈,树状数组,高斯消元
BestCoder Round #90 本次至少暴露出三个知识点爆炸.... A. zz题 按题意copy Init函数 然后统计就ok B. 博弈 题 不懂 推了半天的SG..... 结果这 ...
- bestcoder Round #7 前三题题解
BestCoder Round #7 Start Time : 2014-08-31 19:00:00 End Time : 2014-08-31 21:00:00Contest Type : ...
- Bestcoder round #65 && hdu 5593 ZYB's Tree 树形dp
Time Limit: 3000/1500 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total Submissio ...
- Bestcoder round #65 && hdu 5592 ZYB's Premutation 线段树
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total Submissio ...
- 暴力+降复杂度 BestCoder Round #39 1002 Mutiple
题目传送门 /* 设一个b[]来保存每一个a[]的质因数的id,从后往前每一次更新质因数的id, 若没有,默认加0,nlogn复杂度: 我用暴力竟然水过去了:) */ #include <cst ...
- 贪心 BestCoder Round #39 1001 Delete
题目传送门 /* 贪心水题:找出出现次数>1的次数和res,如果要减去的比res小,那么总的不同的数字tot不会少: 否则再在tot里减去多余的即为答案 用set容器也可以做,思路一样 */ # ...
随机推荐
- height:100%与height:inherit的区别
一.兼容性 首先,inherit这个属性只是在ie8+才支持:100%支持ie6: 二.大多数情况下没有区别 在正常情况下height:100%与height:inherit没有任何区别: 1.父元素 ...
- WebRTC的一个例子
内容引自:一个WebRTC实现获取内网IP的例子(穿透NAT) 网页代码直接复制到下面(如果以上链接被墙,可以直接将下面代码保存文件,然后在浏览器打开即可,不支持IE浏览器): <!doctyp ...
- Solr使用入门指南
本文转自http://chuanliang2007.spaces.live.com/blog/cns!E5B7AB2851A4C9D2!499.entry?wa=wsignin1.0 由于搜索引擎功能 ...
- C#中的 特性 详解(转载)
本篇幅转载于:http://www.cnblogs.com/rohelm/archive/2012/04/19/2456088.html C#中特性详解 特性提供了功能强大的方法,用于将元数据或声明信 ...
- mysql 5.7 的安装配置与 navicat premium for mysql 11 的破解使用
再安装mysql5.7 或以上的版本出现了一些问题,现在总结下,希望能给初入学习mysql的人一下帮助,大牛就不要来嘲笑小弟我了 首先准备如下: 1.下载mysql 5.7,下载地址:https:// ...
- 442. Find All Duplicates in an Array
https://leetcode.com/problems/find-all-duplicates-in-an-array/ 一列数,1 ≤ a[i] ≤ n (n = size of array), ...
- ASCII码、Unicode码 转中文
ASCII码.Unicode码 转中文 在最近工作中遇到了一些汉字编码转换的处理,可以通过正则表达式及转换字符来实现转成中文 Unicode转换示例 通常为10位编码, 通过digit参数传入 pri ...
- sh1.shell脚本练习
练习: 1.写一个脚本 判断当前系统上是否有用户的默认shell为bash 如果有,就显示其中一个的用户名:否则,就显示没有这类用户. #!/bin/bash grep "bash$&quo ...
- android 实现返回键执行home键方法
在公司的产品开发,中老板很是执着于,不要看到启动界面,但是又不想去掉启动界面. so 实现返回键执行home键方法. public boolean onKeyDown(int keyCode, Key ...
- Linux-/proc目录简介
Linux /proc目录简介 1.简单了解 以文件系统的方式为访问系统内核数据的操作提供接口 由linux内核提供:通过/proc文件系统,在运行时访问内核内部数据结构.改变内核设置的一种机制 pr ...