A.Smooth Visualization

简单模拟题,不多说了。

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<string>
#include<cmath>
#include<set>
#include<vector>
#include<stack>
#define mem(a,b) memset(a,b,sizeof(a))
#define FOR(a,b,i) for(i=a;i<=b;++i)
#define For(a,b,i) for(i=a;i<b;++i)
#define N 1000000007
using namespace std;
inline void RD(int &ret)
{
char c;
do
{
c=getchar();
}
while(c<'0'||c>'9');
ret=c-'0';
while((c=getchar())>='0'&&c<='9')
{
ret=ret*10+(c-'0');
}
}
inline void OT(int a)
{
if(a>=10)
{
OT(a/10);
}
putchar(a%10+'0');
}
int n;
char s[105];
int ss[705];
int main()
{
int t;
scanf("%d",&t);
getchar();
while(t--)
{
gets(s);
int l = strlen(s);
int ll = 0;
int ma = 0;
int a = s[0] - '0';
ss[0] = a;
ma = a;
ll++;
int b;
for(int i=1;i<l;i++)
{
a = s[i-1] - '0';
b = s[i] - '0';
ma = max(ma,b);
if(b == a)
{
ss[ll] = b;
ll++;
}
if(b > a)
{
int c = a + 1;
do
{
ss[ll] = c;
c++;
ll++;
}while(c <= b);
}
if(b < a)
{
int c = a - 1;
do
{
ss[ll] = c;
c--;
ll++;
}while(c >= b);
}
}
for(int i = ma;i >=1;i--)
{
for(int j=0;j<ll;j++)
{
if(i > ss[j]) printf("*");
else printf("+");
}
printf("\n");
}
}
return 0;
}

E.Social Holidaying

二分图匹配,题意是给你两个序列,要求A序列中最多有多少对数和为B序列中的数,且A序列中的数每个只能用一次,B序列的数可以无限次出现。

思路:可以将A序列中所有能组成的可能全都组合起来,如果B序列中有出现就开始搜索,把所有情况都搜出来。

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<string>
#include<cmath>
#include<set>
#include<vector>
#include<stack>
#include<map>
#define mem(a,b) memset(a,b,sizeof(a))
#define FOR(a,b,i) for(i=a;i<=b;++i)
#define For(a,b,i) for(i=a;i<b;++i)
#define N 1000000007
using namespace std;
inline void RD(int &ret)
{
char c;
do
{
c=getchar();
}
while(c<'0'||c>'9');
ret=c-'0';
while((c=getchar())>='0'&&c<='9')
{
ret=ret*10+(c-'0');
}
}
inline void OT(int a)
{
if(a>=10)
{
OT(a/10);
}
putchar(a%10+'0');
}
map<long long,int>s;
vector<int>p[1001];
int vis[1001],tmp[1001];
long long x[1001],y;
int f(int j)
{
int i,q;
for(i=0;i<p[j].size();++i)
{
q=p[j][i];
if(vis[q]==0)
{
vis[q]=1;
if(tmp[q]==0||f(tmp[q])==1)
{
tmp[q]=j;
return 1;
}
}
}
return 0;
}
int main()
{
int t,i,j,sum,n,m;
scanf("%d",&t);
while(t--)
{
s.clear();
scanf("%d%d",&n,&m);
for(i=0;i<n;++i)
{
scanf("%lld",&x[i]);
}
for(i=0;i<m;++i)
{
scanf("%lld",&y);
s[y]=1;
}
for(i=0;i<n;++i)
{
p[i].clear();
}
sum=0;
for(i=0;i<n;++i)
{
for(j=0;j<n;++j)
{
if(i==j)
{
continue;
}
if(s[x[i]+x[j]]==1)
{
p[i].push_back(j);
}
}
}
mem(tmp,0);
for(i=0;i<n;++i)
{
mem(vis,0);
if(f(i)==1)
{
sum++;
}
}
printf("%d\n",sum/2);
}
return 0;
}

G.Writings on the Wall

字符串问题,问的是前后两个字符串最多能重合部分几次。

方法有两种:kmp和hash

KMP写法:

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<string>
#include<cmath>
#include<set>
#include<vector>
#include<stack>
#define mem(a,b) memset(a,b,sizeof(a))
#define FOR(a,b,i) for(i=a;i<=b;++i)
#define For(a,b,i) for(i=a;i<b;++i)
//#define N 1000000007
using namespace std;
inline void RD(int &ret)
{
char c;
do
{
c=getchar();
}
while(c<'0'||c>'9');
ret=c-'0';
while((c=getchar())>='0'&&c<='9')
{
ret=ret*10+(c-'0');
}
}
inline void OT(int a)
{
if(a>=10)
{
OT(a/10);
}
putchar(a%10+'0');
}
#define N 50005
char a[N];
char b[N];
int next[N];
int l1,l2;
void update()
{
next[0] = -1;
int i=0,j=-1;
while(i<l2)
{
while(j>=0&&b[i]!=b[j])
{
j=next[j];
}
i++;
j++;
next[i]=j;
}
}
int main()
{
int t,i,j,ans;
scanf("%d",&t);
while(t--)
{
scanf("%s%s",a,b);
l1=strlen(a);
l2=strlen(b);
update();
i=0;
j=0;
while(i<l1)
{
while(j>=0&&a[i]!=b[j])
{
j=next[j];
}
i++;
j++;
if(j==l2&&i<l1)
{
j=next[j];
}
}
ans=0;
while(j>=0)
{
j=next[j];
ans++;
}
printf("%d\n",ans);
}
return 0;
}

HASH写法:

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<string>
#include<cmath>
#include<set>
#include<vector>
#include<stack>
#include <queue>
#include<map>
#define mem(a,b) memset(a,b,sizeof(a))
#define FOR(a,b,i) for(i=a;i<=b;++i)
#define For(a,b,i) for(i=a;i<b;++i)
using namespace std;
inline void RD(int &ret)
{
char c;
do
{
c=getchar();
}
while(c<'0'||c>'9');
ret=c-'0';
while((c=getchar())>='0'&&c<='9')
{
ret=ret*10+(c-'0');
}
}
inline void OT(int a)
{
if(a>=10)
{
OT(a/10);
}
putchar(a%10+'0');
}
int main()
{
int i,j,l1,l2,t,sum;
long long x,y,z;
char a[50001],b[50001];
RD(t);
while(t--)
{
scanf("%s%s",a,b);
l1=strlen(a);
l2=strlen(b);
i=l1-1;
j=0;
z=1;
x=0;
y=0;
sum=1;
while(i>=0&&j<l2)//hash过程
{
x+=z*(a[i]-'a');
z*=33;
y*=33;
y+=(b[j]-'a');
i--;
j++;
if(x==y)
{
sum++;
}
}
printf("%d\n",sum);
}
return 0;
}

H.Robotic Traceur

最短路,我们悲剧地居然一直TLE,后来才发现BFS,SPFA,甚至连暴搞都可以过。。。

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<string>
#include<cmath>
#include<set>
#include<vector>
#include<stack>
#include <queue>
#include<map>
#define mem(a,b) memset(a,b,sizeof(a))
#define FOR(a,b,i) for(i=a;i<=b;++i)
#define For(a,b,i) for(i=a;i<b;++i)
using namespace std;
inline void RD(int &ret)
{
char c;
do
{
c=getchar();
}
while(c<'0'||c>'9');
ret=c-'0';
while((c=getchar())>='0'&&c<='9')
{
ret=ret*10+(c-'0');
}
}
inline void OT(int a)
{
if(a>=10)
{
OT(a/10);
}
putchar(a%10+'0');
}
struct xl
{
double x,y;
}v[1001];
double dis(int i, int j)
{
return sqrt((v[i].x-v[j].x)*(v[i].x-v[j].x)+(v[i].y-v[j].y)*(v[i].y-v[j].y));
}
int main()
{
int t,n,s,tmp,i,id[1001],l[1001],w,res;
double p,q;
RD(t);
while(t--)
{
scanf("%d%d%d%lf%lf",&n,&s,&tmp,&p,&q);
p+=q;
FOR(1,n,i)
{
scanf("%lf%lf",&v[i].x,&v[i].y);
id[i]=-1;
}
id[s]=0;
l[0]=s;
w=1;
res=0;
while(res<w)
{
s=l[res];
FOR(1,n,i)
{
if(id[i]<0&&dis(s,i)<p+1e-6)
{
id[i]=id[s]+1;
l[w++]=i;
if(i==tmp)
{
break;
}
}
}
res++;
}
if(id[tmp]>=0)
{
printf("%d\n",id[tmp]);
}
else
{
printf("Impossible\n");
}
}
return 0;
}

I.Shortest Leash

应该是一道dp题,它要求狗可以选择多个向量的正负方向走,问最远能与远点的距离为多少。。。

我是用随机算法过的,目的在于将所有的向量打乱,使其在加上向量时,能够会在一次中找到正解。

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<string>
#include<cmath>
#include<set>
#include<vector>
#include<stack>
#include<map>
#define mem(a,b) memset(a,b,sizeof(a))
#define FOR(a,b,i) for(i=a;i<=b;++i)
#define For(a,b,i) for(i=a;i<b;++i)
using namespace std;
struct xl
{
double x,y;
} p[101],q,l,r;
double dis(xl a)
{
return sqrt(a.x*a.x+a.y*a.y);
}
int main()
{
int t,i,j,z[101];
double ans;
while(scanf("%d",&t))
{
if(t==0)
{
break;
}
for(i=0; i<t; ++i)
{
scanf("%lf%lf",&p[i].x,&p[i].y);
}
ans=0;
for(j=0;j<=10000;++j)
{
random_shuffle(p,p+t);//随机打乱数组
q.x=0;
q.y=0;
for(i=0; i<t; ++i)
{
l=q;
r=q;
l.x+=p[i].x;
l.y+=p[i].y;
r.x-=p[i].x;
r.y-=p[i].y;
if(dis(l)>dis(r))
{
q=l;
}
else
{
q=r;
}
ans=max(ans,dis(q));
}
}
printf("%.3f\n",ans);
}
return 0;
}

130831组队赛-Regionals 2011, Asia - Kuala Lumpur的更多相关文章

  1. 2015 UESTC Winter Training #4【Regionals 2008 :: Asia - Tehran】

    2015 UESTC Winter Training #4 Regionals 2008 :: Asia - Tehran 比赛开始时电脑死活也连不上WIFI,导致花了近1个小时才解决_(:зゝ∠)_ ...

  2. ACM ICPC Asia Regional 2011 Kuala Lumpur C题

    看了逆波兰表达式之后,发现真是强悍的数据结构,栈的应用怎么感觉一辈子也学不完了呢 后缀表达式即逆波兰表达式,就是将所有的运算符按照一定的等级全部都安排到数字的后面去,实现正确的运算法则. OK,代码要 ...

  3. HDU 4123 (2011 Asia FZU contest)(树形DP + 维护最长子序列)(bfs + 尺取法)

    题意:告诉一张带权图,不存在环,存下每个点能够到的最大的距离,就是一个长度为n的序列,然后求出最大值-最小值不大于Q的最长子序列的长度. 做法1:两步,第一步是根据图计算出这个序列,大姐头用了树形DP ...

  4. Regionals 2012 :: Asia - Dhaka

    水 B Wedding of Sultan 题意:求每个点的度数 分析:可以在,每个字母的的两个端点里求出的的出度,那么除了起点外其他点还有一个入度,再+1 /******************** ...

  5. 2011 Asia Fuzhou Regional Contest

    Xiangqi http://acm.hdu.edu.cn/showproblem.php?pid=4121 模拟,用高内聚低耦合的思想来写模拟题还是很好的,提高了函数的可重用性,程序的可读性,正确性 ...

  6. hdu 4081 Qin Shi Huang's National Road System(最小生成树+dp)2011 Asia Beijing Regional Contest

    同样是看别人题解才明白的 题目大意—— 话说秦始皇统一六国之后,打算修路.他要用n-1条路,将n个城市连接起来,并且使这n-1条路的距离之和最短.最小生成树是不是?不对,还有呢.接着,一个自称徐福的游 ...

  7. [Regionals 2012 :: Asia - Tokyo ]

    链接: https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&category=56 ...

  8. Regionals 2012, Asia - Jakarta 解题报告

    啥都不会做了.. 做题慢死 A.Grandpa's Walk 签到题. 直接DFS就行. 注意先判断这个点可以作为一个路径的起点不. 然后再DFS. 否则处理起来略麻烦 #include <io ...

  9. 130825组队赛-Regionals 2012, North America - East Central NA

    A.Babs' Box Boutique 一道简单的dfs搜索题,需要两两比较,然后搜到底,得到最大值就行了.比赛时队友写的,我只负责debug..赛后自己写的.. #include<iostr ...

随机推荐

  1. How can you determine how much disk space a particular MySQL table is taking up?

    http://stackoverflow.com/questions/6474591/how-can-you-determine-how-much-disk-space-a-particular-my ...

  2. poco vs Boost

    Wooce Yang收集整理 POCO的优点: 1) 比boost更好的线程库,特别是一个活动的方法的实现,并且还可设置线程的优先级. 2) 比 boost:asio更全面的网络库.但是boost:a ...

  3. IT第三天 - 数据类型、转换、Scanner使用

    IT第三天 上午 变量类型 1.6种数值类型:byte.short.int.long.float.double:其中byte是8个字节,short是16字节,int是32字节.long是64字节:日常 ...

  4. 基于物品的协同过滤推荐算法——读“Item-Based Collaborative Filtering Recommendation Algorithms” .

    ligh@local-host$ ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.0.3 基于物品的协同过滤推荐算法--读"Item-Based ...

  5. android 项目中log信息的正确处理

    我们在做项目中,调试程序的时候通常是debug或者打log,特别是看一些json数据之类的,都喜欢打log看看,可是在项目上线时log信息一定不能被打印出来,大家能够平时下载一些做的烂的app,连接e ...

  6. 二分法查找 --JS 实现

    var indexOfSorted = function f(arr,n){ //assume : arr has been sorted var low = 0; var high = arr.le ...

  7. hdu1698 Just a Hook 线段树:成段替换,总区间求和

    转载请注明出处:http://blog.csdn.net/u012860063 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1698 Problem ...

  8. 触发器应用 trigger

    首先有一张表: create table T_SALARY ( name VARCHAR2(20), age NUMBER(2), salary NUMBER(5) ); insert into t_ ...

  9. centos6.5 mysql安装+远程访问+备份恢复+基本操作+卸载

    参考博文: Linux学习之CentOS(十三)--CentOS6.4下Mysql数据库的安装与配置 MySQL修改root密码的多种方法 MySQL的备份与还原 解决mysql导入还原时乱码的问题 ...

  10. Struts 2 OGNL

    1.什么是OGNL? 2.Struts 2 OGNL 表达式      ======================  华丽丽的分割线  ======================  1.什么是OG ...