SGU 乱乱开
本解题报告 乱抄,乱写,随性随心,不喜多喷!
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 乱乱开的更多相关文章
- [转]vnpy乱乱谈 02架构
vnpy乱乱谈 02架构 转自:http://101.132.65.227/?p=51 听到架构这个词先不要害怕. 其实这部分内容还是挺简单的. 一般而言, 一个交易系统我们可以简单的分成输入, (系 ...
- 页面登陆框老是乱乱的?banner跨页图片缩小之后总是在側面不能显示主要部分?哈哈~我来帮你忙~~
有banner背景图片和登陆框的html.css排布 目的:无论页面大小,背景图片都要居中(显示图片中间主要内容,而不是側面的一些东西),登陆框基本能在页面内显示. 盒子的排列应该是这种: <d ...
- 今日SGU 5.29
sgu 299 题意:给你n个线段,然后问你能不能选出其中三个组成一个三角形,数字很大 收获:另一个大整数模板 那么考虑下为什么如果连续三个不可以的话,一定是不存在呢? 连续上个不合法的话,一定是 a ...
- 体验Visual Studio 2015 之 MVC - 视图组建
VS2015 PERVIEW中可以创建MVC 项目. 我们可以 发现有几大亮点. 首先我们看目录结构: 当前项目包含两个主要的文件夹:Solution Items .src 很明显src文件夹下为当前 ...
- Model--汇总
NSFileManager.NSURL.NSFileHandle.NSData.NSXMLParser.NSUserDefaults.NSKeyedArchiver.NSKeyedUnarchiver ...
- 论一次iOS面试
最近觉得现在所在公司平台用户量太少,自身技术已经到了一个瓶颈,是时候需要换一个用户量多的平台,好好研究下iOS的性能优化.内存优化等问题了. 所面试的公司由于一些默认的规定,就不多说了,大致是面了一个 ...
- 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 ...
- 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 ...
- TWaver初学实战——如何在EasyUI中插入TWaver(续)
上次文章虽然简单易懂,但很有些小伙伴不满意:你这TWaver和EasyUI结合,只不过生硬地把TWaver图形插进去了,数据和人家EasyUI没一毛钱关系.嘿嘿,不就是想发生关系嘛,没问题啊!咱就还用 ...
随机推荐
- please upgrade your plan to create a new private reposiory
请升级你的计划来创建一个新的私人仓库 提交仓库到github,要公开,除非买他们服务,所以把勾去掉就好了keep this code private
- MAC的睡眠模式介绍
因为之前用的是网上流传的土法来禁止生成 sleepimage,尝到了苦头,而且2次! 大家知道 OSX 有几种睡眠模式,其中 hibernatemode 可以是 0 (传统睡眠方式,不生成 sleep ...
- str.format输出乱码
如该示例,str.Format(L"相似度:%f\t视频名称:%s\t起始位置:%d\r\n",tmp[0].dblSimilarity,tmp[0].szFileName,tmp ...
- 【dp】拔河比赛
01背包:感谢ZCK大佬 题目描述 学校举行拔河比赛,所有的人被分成了两组,每个人必须(且只能够)在其中的一组,要求两个组的人数相差不能超过1,且两个组内的所有人体重加起来尽可能地接近. 输入 输入中 ...
- virtualenvwrapper.sh报错: There was a problem running the initialization hooks.解决
由于在ubuntu环境下,将python做与python3.6做了软链接(ln -s python python3.6),并且pip也被我做了软链接,所以导致用pip安装virtualenvwrapp ...
- 【Java_多线程并发编程】基础篇——synchronized关键字
1. synchronized同步锁的原理 当我们调用某对象的synchronized方法或代码块时,就获取了该对象的同步锁.例如,synchronized(obj)就获取了“obj这个对象”的同步锁 ...
- (15)zabbix ODBC数据库监控
概述 ODBC监控对应于Zabbix Web管理端中的Database monitor监控项类型. ODBC是用于访问数据库管理系统(DBMS)的C语言中间件API.ODBC由Microsoft开发, ...
- CVS在update时状态status
cvs update -Ad 时,terminal 会display如下: P xx.v P xx.c ? xx.v ? xx.c A xx.v M xx.v U xx.v C xx.v 第一个字母: ...
- 【转】ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
为了加强安全性,MySQL5.7为root用户随机生成了一个密码,在error log中,关于error log的位置,如果安装的是RPM包,则默认是/var/log/mysqld.log. 一般可通 ...
- PAT Basic 1037
1037 在霍格沃茨找零钱 如果你是哈利·波特迷,你会知道魔法世界有它自己的货币系统 —— 就如海格告诉哈利的:“十七个银西可(Sickle)兑一个加隆(Galleon),二十九个纳特(Knut)兑一 ...