本解题报告 乱抄,乱写,随性随心,不喜多喷!

SGU 142:

思路:一个string的字串不会超过2^20个,我们枚举出来就好了。

我出错点:数组RE

 #include<stdio.h>
#include<math.h>
#include<algorithm>
#include<string.h>
#include<string>
#include<iostream>
#include<set>
#include<map>
#include<vector> using namespace std;
typedef long long ll; #define N 566666 int n;
char s[N];
bool b[<<];
char ss[]; int main()
{
scanf("%d",&n);
scanf("%s",s);
int len=; memset(b,false,sizeof(false)); int tot=<<len; for (int i=;i<n;i++)
{
int num=;
for (int j=;j<len&&i+j<n;j++)
{
if (s[i+j]=='a')
num<<=;
else num=num*+;
b[num]=true;
}
} int pos; for (int i=;i<tot;i++)
if (!b[i])
{
pos=i;
break;
} int num=floor(log(pos)/log()); printf("%d\n",num);
int tmp=num; while (pos>)
{
if (pos&) ss[tmp--]='b';
else ss[tmp--]='a';
pos/=;
} for (int i=;i<=num;i++)
printf("%c",ss[i]); printf("\n");
return ;
}

View C:ode

SGU 146 你WA的话,精度 ,精度

SGU 172:二分图染色,然后二分图的一边

 #include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>
#include<math.h>
#include<stack>
#include<string>
#include<map>
#include<set>
#include<vector> using namespace std;
typedef long long ll;
#define N 102222 vector<int>mp[];
int vis[]; int col[]; int ans[]; int tmp=;
int flag=;
void dfs(int x)
{
vis[x]=;
for (int i=;i<mp[x].size();i++)
{
int v=mp[x][i];
if (!vis[v])
{
col[v]=-col[x];
dfs(v);
}
else
{
if (col[v]==col[x])
{
flag=;
return ;
}
}
}
} int main()
{
int n,m;
scanf("%d%d",&n,&m); while (m--)
{
int x,y;
scanf("%d%d",&x,&y);
mp[x].push_back(y);
mp[y].push_back(x);
} for (int i=;i<=n;i++)
if (!vis[i])
{
col[i]=;
dfs(i);
if (flag)
{
puts("no");
return ;
}
} puts("yes"); for (int i=;i<=n;i++)
if (col[i]==)
{
ans[++tmp]=i;
} printf("%d\n",tmp);
for (int i=;i<tmp;i++)
printf("%d ",ans[i]); printf("%d\n",ans[tmp]); return ;
}

SGU 149:  经典题,求任意点到树中任意一点的最长距离。

一遍DFS求出一个点,子树在树中的最远和次远距离;

对每个点 求出其父节点的最远距离。dp[father[u]]= max(dp[father[u]],dp[u].first(子树最长)+e.val);(father[u]不再u 的最长路径上)

否则:dp[father[u]]= max(dp[father[u]],dp[u].first(子树次长)+e.val);(father[u]再u 的最长路径上)

 #include<stdio.h>
#include<math.h>
#include<algorithm>
#include<string.h>
#include<string>
#include<iostream>
#include<set>
#include<map>
#include<vector> using namespace std;
typedef long long ll; #define N 11111
int head[N];
struct node
{
int v,c,next;
}e[N<<];
int tot; struct node2
{
int idx,val;
}dp[N][],p; void init()
{
tot=;
memset(head,-,sizeof(head));
} void add(int u,int v,int c)
{
e[tot].v=v;
e[tot].c=c;
e[tot].next=head[u]; head[u]=tot++;
} void dfs_son(int u,int pre)
{
for (int i=head[u];i!=-;i=e[i].next)
{
int v=e[i].v;
int c=e[i].c;
if (v==pre) continue;
dfs_son(v,u);
p.val=dp[v][].val+c;
p.idx=v; if (p.val>dp[u][].val)
{
dp[u][]=dp[u][];
dp[u][]=p;
} else if (p.val>dp[u][].val)
{
dp[u][]=p;
}
}
} void dfs_father(int u,int pre)
{
for (int i=head[u];i!=-;i=e[i].next)
{
int v=e[i].v;
int c=e[i].c;
if (v==pre) continue;
int first=dp[u][].val;
int second=dp[u][].val; int idx=dp[u][].idx; if (idx==v) dp[v][].val = max(dp[v][].val,second+c);
else dp[v][].val = max(dp[v][].val,first+c); dp[v][].val=max(dp[v][].val,dp[u][].val+c); dfs_father(v,u);
}
} int main()
{ int n;
scanf("%d",&n);
init(); for (int i=;i<=n;i++)
{
int x,y;
scanf("%d%d",&x,&y);
// add(i,x,y);
add(x,i,y);
}
dfs_son(,-);
dfs_father(,-);
for (int i=;i<=n;i++)
printf("%d\n",max(dp[i][].val,dp[i][].val));
return ;
}

SGU 169: 脑洞题,真心脑洞大开题;看到这么大数位的k,就知道有规律,但是想到的还是太浅太浅,我只是往奇偶数上想了

引用一篇blog:  http://www.cppblog.com/willing/archive/2010/05/04/114304.html

SGU 143

小型树形DP,如果子树大于0,那么父节点加上就好了,

注意:有一个节点的情况,比如第二个test

 #include<stdio.h>
#include<algorithm>
#include<math.h>
#include<vector>
#include<string.h>
#include<string>
#include<set>
#include<iostream>
using namespace std;
typedef long long ll; #define N 26666
vector<int> mp[N]; int a[N];
int n;
int dp[N];
int vis[N]; void dfs(int u)
{
vis[u]=;
for (int i=;i<mp[u].size();i++)
{
int v=mp[u][i];
if (!vis[v])
{
dfs(v);
if (dp[v]>) dp[u]+=dp[v]; }
} } int main()
{
int n;
scanf("%d",&n); for (int i=;i<=n;i++) scanf("%d",&a[i]),dp[i]=a[i]; for (int i=;i<n;i++)
{
int x,y;
scanf("%d%d",&x,&y);
mp[x].push_back(y);
mp[y].push_back(x);
} dfs(); int ans=-; for (int i=;i<=n;i++)
ans=max(ans,dp[i]);
printf("%d\n",ans);
return ;
}

SGU 144:

概率题,一个人等待的时间是(Y-X)*60,如果先到的人等待了Zminute,就会离开,求不会离开的概率

画个矩形图。

SGU 134:

求树的重心;

要么是某一个子树的最大节点,要么是包含根的子树;

 #include<stdio.h>
#include<algorithm>
#include<math.h>
#include<vector>
#include<string.h>
#include<string>
#include<set>
#include<map>
#include<iostream>
#include<set>
using namespace std;
typedef long long ll;
#define N 33333
vector<int>mp[N];
int sum[N];
int a[N];
int dp[N]; void dfs(int u,int pre)
{
for (int i=;i<mp[u].size();i++)
{
int v=mp[u][i];
if (v==pre) continue;
dfs(v,u);
sum[u]+=sum[v];
}
sum[u]++;
} int t=;
int ans=; void cal(int u,int pre)
{
int tmp=sum[u];
dp[u]=;
for (int i=;i<mp[u].size();i++)
{
int v=mp[u][i];
if (v==pre) continue;
cal(v,u);
dp[u]=max(dp[u],sum[v]);
} dp[u]=max(dp[u],sum[]-sum[u]);
if (dp[u]==ans)
{
++t;
a[t]=u;
}
else if (dp[u]<ans)
{
t=;
ans=dp[u];
a[t]=u;
}
} int main()
{
int n;
scanf("%d",&n);
for (int i=;i<n;i++)
{
int x,y;
scanf("%d%d",&x,&y);
mp[x].push_back(y);
mp[y].push_back(x);
}
dfs(,-);
//for (int i=1;i<=n;i++) printf("%d ",sum[i]);
cal(,-);
printf("%d %d\n",ans,t);
sort(a+,a+t+);
for (int i=;i<t;i++) printf("%d ",a[i]);
printf("%d\n",a[t]);
return ;
}

SGU 174:

只要判断当前点是否在一个集合中,不包括自己

 #include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
#include <set>
#include <map>
#include <string>
#include <math.h>
#include <stdlib.h>
#include <time.h>
#include<string>
#include<map> using namespace std;
#define N 402222
typedef long long ll; pair<int,int> pt;
#define mk make_pair
map<pair<int,int>,int>mp;
int f[N]; int find(int x)
{
if (f[x]!=x) f[x]=find(f[x]);
return f[x];
} int main()
{
int n;
scanf("%d",&n);
int t=;
for (int i=;i<=n*;i++) f[i]=i; int ans=;
for (int i=;i<=n;i++)
{
int x,y,xx,yy;
scanf("%d%d",&x,&y);
scanf("%d%d",&xx,&yy);
if (!mp[mk(x,y)]) mp[mk(x,y)]=++t;
if (!mp[mk(xx,yy)]) mp[mk(xx,yy)]=++t;
x=mp[mk(x,y)];
y=mp[mk(xx,yy)];
x=find(x);
y=find(y);
if (x==y)
{
ans=i;
break;
}
else f[x]=y;
}
printf("%d\n",ans);
return ;
}

SGU 乱乱开的更多相关文章

  1. [转]vnpy乱乱谈 02架构

    vnpy乱乱谈 02架构 转自:http://101.132.65.227/?p=51 听到架构这个词先不要害怕. 其实这部分内容还是挺简单的. 一般而言, 一个交易系统我们可以简单的分成输入, (系 ...

  2. 页面登陆框老是乱乱的?banner跨页图片缩小之后总是在側面不能显示主要部分?哈哈~我来帮你忙~~

    有banner背景图片和登陆框的html.css排布 目的:无论页面大小,背景图片都要居中(显示图片中间主要内容,而不是側面的一些东西),登陆框基本能在页面内显示. 盒子的排列应该是这种: <d ...

  3. 今日SGU 5.29

    sgu 299 题意:给你n个线段,然后问你能不能选出其中三个组成一个三角形,数字很大 收获:另一个大整数模板 那么考虑下为什么如果连续三个不可以的话,一定是不存在呢? 连续上个不合法的话,一定是 a ...

  4. 体验Visual Studio 2015 之 MVC - 视图组建

    VS2015 PERVIEW中可以创建MVC 项目. 我们可以 发现有几大亮点. 首先我们看目录结构: 当前项目包含两个主要的文件夹:Solution Items .src 很明显src文件夹下为当前 ...

  5. Model--汇总

    NSFileManager.NSURL.NSFileHandle.NSData.NSXMLParser.NSUserDefaults.NSKeyedArchiver.NSKeyedUnarchiver ...

  6. 论一次iOS面试

    最近觉得现在所在公司平台用户量太少,自身技术已经到了一个瓶颈,是时候需要换一个用户量多的平台,好好研究下iOS的性能优化.内存优化等问题了. 所面试的公司由于一些默认的规定,就不多说了,大致是面了一个 ...

  7. UVA 10497 - Sweet Child Makes Trouble 高精度DP

    Children are always sweet but they can sometimes make you feel bitter. In this problem, you will see ...

  8. HDU5568/BestCoder Round #63 (div.2) B.sequence2 dp+高精度

    sequence2 Problem Description Given an integer array bi with a length of n, please tell me how many ...

  9. TWaver初学实战——如何在EasyUI中插入TWaver(续)

    上次文章虽然简单易懂,但很有些小伙伴不满意:你这TWaver和EasyUI结合,只不过生硬地把TWaver图形插进去了,数据和人家EasyUI没一毛钱关系.嘿嘿,不就是想发生关系嘛,没问题啊!咱就还用 ...

随机推荐

  1. 看结果,测试?java中的String类 字符串拆分成字符串数组 判定邮箱地址 字符串比较 参数传递?

    看结果1? package com.swift; class ArrayString { public static void main(String[] args) { String str = & ...

  2. 【求助】NdisSend,自定义数据包发送失败?

    做ndis hook的时候,自定义了一个数据包,包结构应该没有问题,填充NDIS_PACKET结构是这样的,先初始化:        NdisAllocatePacketPool(&nStat ...

  3. linux配置nodeJs环境教程

    来自阿里云:https://help.aliyun.com/document_detail/50775.html

  4. bzoj5183 [Baltic2016]Park

    题目描述: bz luogu 题解: 把坐标系看反了持续$WA$系列. 对偶图+并查集维护. 先处理出树对树.树对墙的空隙,然后把人和空隙按从小到大排序. 用并查集维护四面墙之间是否能互相隔断. 代码 ...

  5. HDU-2544-最短路(Bellman-Ford)

    Bellman-Ford算法是一个时间复杂度很高,但是它可以用来判断负环 负环就是上面的图,那个环的整体值小于零了,所以就是负环. 我们用Bellman-Ford算法进行更新,打一个表出来: k a ...

  6. [LUOGU] 2820 局域网

    题目背景 某个局域网内有n(n<=100)台计算机,由于搭建局域网时工作人员的疏忽,现在局域网内的连接形成了回路,我们知道如果局域网形成回路那么数据将不停的在回路内传输,造成网络卡的现象.因为连 ...

  7. 【Java_基础】空串、空格串、null的区别

    1.表示的区别 string str1 = "";    //空串      str1.length() 等于 0 string str2 = " ";   / ...

  8. GIMP素描效果

    1/打开图片,拖动图片到GIMP软件 2/复制两次图层 3/选中最上面的一个图层,mode改为Dodge 4/点击Color,选择Invert,可以看到图片变淡了 5/点击Filters,Distor ...

  9. GIMP如何创建layer masks,创建,删除,禁用,复制mask

    这次案例是背景替换,采用创建一个新的layer masks: 前期准备好要处理的图片:     1.创建一个新的图层,选择Layer,点击Mask,选择Add Layer Mask: 根据情况选择合适 ...

  10. git 常用命令及虚拟机服务器仓库搭建

    $ git config --global user.email "you@example.com" $ git config --global user.name "Y ...