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

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. GloVe:另一种Word Embedding方法

    若想深层地理解GloVe和本文,最好了解SVD, word2vec(skip-gram为主)的相关知识.若仅寻求一种新的word embedding方法,可以不必了解以上前置知识. 一言以蔽之,Glo ...

  2. https 调用验证失败 peer not authenticated

    https 调用验证失败 peer not authenticated 报错日志: Caused by: javax.net.ssl.SSLPeerUnverifiedException: peer ...

  3. javascipt的forEach

    1.Array let arr = [1, 2, 3]; arr.forEach(function (element, index, array) { console.log('数组中每个元素:', ...

  4. 【DB_MySQL】 limit——取查询结果的子集

    语法:select * from student limit beginIndex,length; 这里结果集的下标同数组一样从0开始,beginIndex表示起始位置,length表示从beginI ...

  5. (59)zabbix拓扑图展示链路状况Link indicators

    Link indicators介绍 上一篇已经了解了如何配置zabbix map,也提到了如何连接两个map元素,这节我们来讲两个map元素之间的链路指示配置. 我们需要在链路上配置trigger,如 ...

  6. [php] 高级教程

    include 和 require 语句用于在执行流中插入写在其他文件中的有用的代码. include 和 require 除了处理错误的方式不同之外,在其他方面都是相同的: require 生成一个 ...

  7. 多线程并发情况下 重复insert问题

    代码逻辑: if(数据不存在){ insert(); } 线程启动后,发现数据库表中有相同的记录 解决方案 synchronized同步代码块即加同步锁,synchronized同步代码块的功能: 当 ...

  8. 求分数序列的前n项之和

    有一个分数序列 2/1,3/2,5/3,8/5,13/8,21/13,.... 求这个分数序列的前n项之和. 输入 测试数据有多组,其第一行为一个正整数k(0<k<=90),表示测试数据的 ...

  9. python基础——16(re模块,内存管理)

    一.内存管理 1.垃圾回收机制 不能被程序访问到的数据,就称之为垃圾. 1.1.引用计数 引用计数是用来记录值的内存地址被记录的次数的. 每一次对值地址的引用都使该值的引用计数+1:每一次对值地址的释 ...

  10. Java-计算程序运行时间

    package com.tj; @SuppressWarnings("unused") public class CountTime { public static void ma ...