自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

围巾的ACM博客

刚毕业~

  • 博客(139)
  • 收藏
  • 关注

原创 HYSBZ 1036 树的统计Count(树链剖分)

思路:树链剖分的又一个模板题,不过坑了好久...不知道为什么输入询问的时候用string会RE...#include#include#include#include#include#includeusing namespace std;const int maxn = 30005;#define lson i<<1,l,m#define rson i<<1|1,m+1

2016-05-30 23:26:33 269

原创 Codeforces Round #341 (Div. 2)B. Wet Shark and Bishops

思路:求对角线相同的对数,显然可以由第一个样例得知,同一个对角线的要么x+y相同,要么x-y相同,那么随便记录一下,每一个的贡献是cnt[i]*(cnt[i]-1)/2#includeusing namespace std;int cnt1[10005];int cnt2[10005];int main(){ int n; int ans = 0; cin

2016-05-30 23:01:09 460

原创 Codeforces Round #341 (Div. 2)A Wet Shark and Odd and Even

思路:水题,直接全部加起来,并且维护一个最小的奇数,因为如果最后结果是奇数的话那么减去那个最小的奇数就会变成最大的偶数啦#includeusing namespace std;#define LL long longint main(){ int n; cin >> n; LL ans = 0; LL mins = 1e9; while(n--) { LL

2016-05-30 22:57:57 365

原创 Codeforces Round #320 (Div. 2) [Bayan Thanks-Round]B Finding Team Member

思路:阅读题....读懂题目之后就是结构体排个序#includeusing namespace std;struct Node{ int i,j,d;}nodes[805*806];bool cmp(Node a,Node b){ return a.d>b.d;}int ans[805];int main(){ memset(ans,-1,sizeof(an

2016-05-29 16:51:07 271

原创 Codeforces Round #320 (Div. 2) [Bayan Thanks-Round]A Raising Bacteria

思路:水题,就是看二进制有多少个1#includeusing namespace std;int main(){ int n; cin >>n; int ans = 0; while(n) { if(n&1) ans++; n>>=1; } cout << ans << endl;}A. Raising Bacteria

2016-05-29 16:49:56 411

原创 Codeforces Round #319 (Div. 2) C Vasya and Petya's Game

思路:素数筛处理出所有素数,枚举每个素数p,可以知道如果p^k#includeusing namespace std;const int maxn = 1105;int b[maxn];int a[maxn];int prim(){ memset(a,0,sizeof(a)); for(int i = 2;i<=maxn;i++) { if(!a[i])

2016-05-29 11:18:06 337

原创 Codeforces Round #319 (Div. 2)E Points on Plane

题意:给出n个点,要求排序后,相邻两点的欧拉距离之和小于等于2.5e9做法:由于0≤ xi, yi ≤ 1e6,所以可以将x然后每一份中的点都按照y单调排序。拿任意一份点做实验,如果从最小的y开始往上走,那么y的贡献最多1e6,那么一千份就总共最多贡献1e9。最后考虑x的贡献,在某一份点中,从一个点走到另一个点最多贡献1e3,那么这份总共最多贡献1e9,也就是所有点都在这一份里

2016-05-29 11:11:13 623

原创 Codeforces Round #319 (Div. 2) B Modulo Sum

题意:给你n个数,从中随机取几个数,使得这几个数的和是m的倍数,如果存在这样一组数,输出yes,否则输出no思路:首先,当n>m时,肯定有符合条件的,由同余定理可以得到,将这前n项和对m取余的结果用一个数组表示,则因为n大于m,必然存在两个相等的数s1,和s2,则这两个数中间的那些数字之和就能整除m。其次,对于n#includeusing namespace

2016-05-29 11:10:08 326

原创 Codeforces Round #319 (Div. 2)A Multiplication Table

思路:水题#includeusing namespace std;int main(){ int n,x; cin >> n >>x; int ans = 0; for(int i = 1;i<=n;i++) { if(x%i==0&&x/i<=n) ans++; } cout <<ans <<endl;}A. Multipli

2016-05-29 11:08:54 524

原创 Codeforces Round #318 [RussianCodeCup Thanks-Round] (Div. 2)D Bear and Blocks

思路:找一下规律,然后就左右各扫一遍就好啦#includeusing namespace std;const int maxn = 1e5+7;int a[maxn];int dp[maxn];int l[maxn];int r[maxn];int main(){ int n; cin >> n; for(int i = 0;i<n;i++) cin >>

2016-05-28 21:20:53 268

原创 Codeforces Round #318 [RussianCodeCup Thanks-Round] (Div. 2)C Bear and Poker

思路:水题....一直除3然后一直除2就好了#includeusing namespace std;const int maxn = 1e5+6;int a[maxn];int main(){ int n; cin >> n; for(int i = 1;i<=n;i++) cin >> a[i]; for (int i = 1;i<=n;i++) {

2016-05-28 20:05:57 519

原创 Codeforces Round #318 [RussianCodeCup Thanks-Round] (Div. 2)B Bear and Three Musketeers

思路:直接n^3显然会超时的,那么我们做一个小小的优化就是先判断两个人是否互相认识,如果这两个人互相认识才进入到下一层循环中,这样能大大减少复杂度#includeusing namespace std;int n,m;int e[4005][4005];int degree[4005];int main(){ cin >> n >> m; for (int i

2016-05-28 20:04:23 342

原创 Codeforces Round #318 [RussianCodeCup Thanks-Round] (Div. 2)A

思路:水题#includeusing namespace std;int a[105];int main(){ int n; scanf("%d",&n); for(int i = 0;i<n;i++) scanf("%d",&a[i]); sort(a+1,a+n); int ans = 0; int s = a[0]; while(s <= a[n-

2016-05-28 20:01:35 245

原创 Codeforces Round #317 [AimFund Thanks-Round] (Div. 2) C Lengthening Sticks(组合+容斥)

思路:利用容斥原理,首先考虑总的情况,即求x+y+z是组合数C(i+2,2),因为相当于刻度从1开始然后长度为i的尺子拆成三份有多少种情况,也就是在不同的位置切两刀,然后考虑,可以有最多两份长度为0,也就是说在0到1之间可以切两刀于是总共就是i+2个可以切的位置中选择两个。然后进行容斥,把不符合形成三角形条件的情况(两边之和小于等于第三边)减去,枚举a,b,c分别做第三条边

2016-05-28 11:27:10 303

原创 Codeforces Round #317 [AimFund Thanks-Round] (Div. 2) B Order Book

思路:阅读题....#includeusing namespace std;int buy[100005];int sell[100005];int main(){ int n,s; cin >> n >> s; for (int i = 0;i<n;i++) { char c; int p,q; cin >> c >> p >> q;

2016-05-27 21:53:08 344

原创 Codeforces Round #317 [AimFund Thanks-Round] (Div. 2)A Arrays

思路:水题#includeusing namespace std;const int maxn = 1e5+6;int a[maxn];int b[maxn];int main(){ int n1,n2; scanf("%d%d",&n1,&n2); int k,m; scanf("%d%d",&k,&m); for(int i = 1;i<=n1;i++)

2016-05-27 20:37:45 268

原创 Codeforces Round #354 (Div. 2) E - The Last Fight Between Human and AI

转自别人的题解:(x-k)|P(x)等价于P(k)==0分两种情况考虑如果k=0的话,谁先使得a[0]=0就好了如果k!=0的话,注意到每一步都可以任意改变P(k)的值,因此只有最后一步是有用的,如果所有数都已经确定,那么检查P(k)是否为0,否则胜负取决于最后一步操作的先手。#includeusing namespace std;const int maxn = 1e

2016-05-27 20:20:23 360

原创 Codeforces Round #291 (Div. 2) C Watto and Mechanism

思路:直接搞个字典树就好啦#includeusing namespace std;struct trie { int nxt[3], ep; trie() { memset(nxt, -1, sizeof nxt); ep = 0; }}ar[2000001];char pp[600011];int cnt = 0;

2016-05-27 19:39:53 514

原创 Codeforces Round #291 (Div. 2) D R2D2 and Droid Army(线段树+二分)

题意:给你一个N*M的矩阵,每次你可以使整一列的值减少一,当某一行的所有列为0时那个机器视为被消灭,你可以射击K次,问能消灭的最多的连续机器人数目思路:二分答案,枚举区间的起点,然后用线段树查询区间最大值即可#include#include#include#include#include#include#include#include#include#includ

2016-05-27 19:38:24 295

原创 Codeforces Round #291 (Div. 2) Han Solo and Lazer Gun

思路:由于n只有1000,所以n方爆就好了#includeusing namespace std;struct Node{ int x,y;}nodes[1005];int vis[1005];int main(){ int n,x0,y0; scanf("%d%d%d",&n,&x0,&y0); for(int i = 1;i<=n;i++) {

2016-05-27 15:56:04 492

原创 Codeforces Round #291 (Div. 2)A Chewbaсca and Number

思路:水题...注意只有一个数字的情况和第一位变化之后不能为0即可#includeusing namespace std;#define LL long longchar s[100];int main(){ scanf("%s",s+1); int n = strlen(s+1); for(int i = 1;i<=n;i++) { if(i==1 &&

2016-05-27 15:54:46 236

原创 Codeforces Beta Round #1 Theatre Square

思路:水题,n/a*m/a即可,注意向上取整#includeusing namespace std;#define LL long longint main(){ LL n,m,a; cin >> n >> m >> a; LL ans =ceil(n/(double)a)*ceil(m/(double)a); cout << ans << endl;}

2016-05-26 23:35:47 309

原创 Codeforces Round #354 (Div. 2) D Theseus and labyrinth

思路:非常恶心的BFS...相当于分了四层的图#includeusing namespace std;char rot(char x){ if (x=='*' || x=='+') return x; if (x=='>') return 'v'; if (x=='<') return '^'; if

2016-05-26 22:10:11 365

原创 Codeforces Round #354 (Div. 2) C Vasya and String(尺取法二分)

思路:枚举结尾,然后暴力二分就好了,用前缀和预处理一下,那么前缀和之差,就是你需要改变的个数#includeusing namespace std;const int maxn = 1e5+7;int n,k;int sum[maxn];char s[maxn];int main(){ scanf("%d%d",&n,&k); scanf("%s",s+1)

2016-05-26 22:08:37 773

原创 Codeforces Round #354 (Div. 2) B Pyramid of Glasses(模拟)

思路:模拟一下就可以了#includeusing namespace std;int n,t;double a[15][15];void work(){ a[1][1]+=1; for(int i = 1;i<=n;i++) { for(int j = 1;j<=i;j++) { if(a[i][j]<=1) continue; double

2016-05-26 22:07:12 411

原创 Codeforces Round #354 (Div. 2) A Nicholas and Permutation

思路:水题,考虑和第一个和最后一个位置交换就好啦#includeusing namespace std;int main(){ int n; int a[105]; scanf("%d",&n); int Minpos = 0; int Maxpos = 0; for(int i = 1;i<=n;i++) { scanf("%d",&a[i]); if(

2016-05-26 22:05:47 299

原创 fzu 2082 过路费(树链剖分)

思路:树链剖分的裸题了#include#include#include#include#define LL long longusing namespace std;const int maxn = 50000+100;int siz[maxn],fa[maxn],son[maxn],dep[maxn],top[maxn],id[maxn];int tot;int v

2016-05-25 22:46:04 327

原创 LightOJ 1348 Aladdin and the Return Journey(树链剖分)

思路:一道树链剖分的基本题,给定一个数,节点数为n。先输入一个n,代表节点数,然后一行有n个数,代表 树上点从0 到n - 1的初始点权,然后n - 1行,每行两个数a b,代表这两个点之间有一条边。紧接着输入一个m,代表有m个操作,操作有两种:0 a b询问点a到点b路径上的点的权值和,1 a b把点a的权值更新为b#include#include#include#in

2016-05-24 23:43:57 399

原创 UESTC 1253 阿里巴巴和n个大盗(博弈)

思路:一个很经典的博弈问题,转自大神的题解首先总人数是n+1人。由于必须半数以上人同意才能通过方案,所以当剩余两个人时2号必死,因为1号不同意就能独吞。因此2号必须同意3号的方案,所以3号无论什么方案都会被通过,因此他会选择把所有宝石留给自己。当总人数三个以上时就有以下的情况:显然4号需要至少3人的同意,可知3号是无论如何不会同意的,因此他只需要拉拢1,2号即可,也就是给他们1,1的宝

2016-05-24 21:03:17 414

原创 HDU 4198 Quick out of the Harbour(BFS+优先队列)

思路:一道比较简单的BFS+优先队列//广搜 + 优先队列,#include#include#include#includeusing namespace std;const int MAXN=1010;struct node{ int x,y; int time; friend bool operator<(node a,node b)//ti

2016-05-24 21:00:30 276

原创 ZOJ 3829 Known Notation

思路:贪心,数字的个数要要保证比∗的个数多1,不够的话优先补在开头是最优的。然后遍历一遍字符串,碰到数字+1,碰到∗,-1,保证数字的个数大于等1,如果不够减的话,可以和最后面的一个数字交换位置(用栈维护十分方便),因为添加和交换代价都是1。#include#include#include#includeusing namespace std;int main()

2016-05-24 20:56:44 354

原创 ZOJ 3826 Hierarchical Notation

思路:哈希之后一直爬就是了#include #include #include #include #include #include #include #include #include using namespace std;const int N=10010;int T,q,n,bp[N],ep[N],ch[N],bro[N];char s[N*20*2]

2016-05-24 20:54:46 323

原创 ZOJ 3822 Domination(概率DP)

思路:一道比较简单的概率DP,转移方程见代码#include#include#includeusing namespace std;int T;double dp[55][55][2550];int main(){ scanf("%d",&T); while(T--) { int n,m; scanf("%d%d",&n,&m); int

2016-05-24 20:53:15 240

原创 ZOJ 3819 Average Score

思路:水题#include #include #include #include #include #include #include #include #include #include #include #include using namespace std;int n,m;int main(){ //freopen("in.txt","r"

2016-05-24 20:52:15 323

原创 spoj375 Query on a tree(树链剖分)

思路:树链剖分的模板#include #include #include #include using namespace std;#define Del(a,b) memset(a,b,sizeof(a))const int N = 10005;int dep[N],siz[N],fa[N],id[N],son[N],val[N],top[N]; //top 最近的重

2016-05-22 15:51:07 343

原创 hdu1227 Fast Food

思路:转自别人:在n个商店中建m个仓库,使各个商店到仓库的路程之和最小,商店到哪个仓库是有选择的,总之路程之和要最小! 我还以给的例子来说,这道题的具体思路:本来想做个图的,这样更清晰,我辛苦做出来的弄上面无法显示啊!我泪奔啊1227 Fast Food (DP)" src="http://www.sinaimg.cn/uc/myshow/blog/misc

2016-05-22 11:17:42 356

原创 hdu1059 Dividing

思路:一个经典的多重背包#include#include#include#define MAXV 60010using namespace std;int d[MAXV],V;void bag01(int c,int w)//01背包{ int i; for(i=V;i>=c;i--) { if(d[i]<d[i-c]+w)

2016-05-22 10:44:45 248

原创 hdu1158 Employment Planning

思路:dp[i][j]表示前i个月最后一个月的总人数为j所花的最小费用,状态移动方程:dp[i][j] = min{dp[i-1][k] + cost[i][j]},其中cost[i][j]是第i月的花费,    1~当k    2~当k>j时,第i个月炒了人,所以cost[i][j] = j*salary + (k-j)*fire#include#includeco

2016-05-22 10:42:50 372

原创 hdu1503 Advanced Fruits

思路:LCS模板题...需要记录路径#include #include #include using namespace std;char s1[1000],s2[1000];int len1,len2,dp[1000][1000],mark[1000][1000];void LCS(){ int i,j; memset(dp,0,sizeof(dp)

2016-05-20 20:38:34 226

原创 hdu1224 Free DIY Tour

思路:简单DP,当然最短路也是滋瓷的#includeusing namespace std;const int maxn = 105;int dp[maxn],pre[maxn],a[maxn];int e[maxn][maxn];void print(int i){ if(i==1) { printf("1"); return; } print(pre[i

2016-05-20 20:33:42 586

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除