2017ACM/ICPC亚洲区沈阳站-重现赛
HDU 6222 Heron and His Triangle
链接:http://acm.hdu.edu.cn/showproblem.php?pid=6222
思路: 打表找规律+大数运算
首先我们可以打个表暴力跑出前几个满足题意的T
打表代码:
#include<bits/stdc++.h>
using namespace std;
bool fun(double n) {
if(abs(round(n) - n) < 0.000000000000001)
return ;
return ;
} int main()
{
for(int i = ;i <= ;i ++){
double num = (i+)*sqrt(*(i-)*(i+))/;
if(fun(num))
cout<<i+<<endl;
}
}
打出表后会得到: 4,14,52,194,724等数据。。。经过推导我们会得到他们之间的公式: a[i] = a[i-1]*4-a[i-2],然后我们用大数模板去跑这串公式就好了
实现代码:
#include<bits/stdc++.h>
using namespace std;
/*bool fun(double n) {
if(abs(round(n) - n) < 0.000000000000001)
return 1;
return 0;
} int main()
{
for(int i = 2;i <= 10000000;i ++){
double num = (i+1)*sqrt(3*(i-1)*(i+3))/4;
if(fun(num))
cout<<i+1<<endl;
}
}*/
string Mult(string s,int x) //大数乘以整形数
{
reverse(s.begin(),s.end());
int cmp=;
for(int i=;i<s.size();i++)
{
cmp=(s[i]-'')*x+cmp;
s[i]=(cmp%+'');
cmp/=;
}
while(cmp)
{
s+=(cmp%+'');
cmp/=;
}
reverse(s.begin(),s.end());
return s;
} string sub(string a,string b)
{
string c;
bool ok=;
int len1=a.length();
int len2=b.length();
int len=max(len1,len2);
for(int i=len1;i<len;i++)
a=""+a;
for(int i=len2;i<len;i++)
b=""+b;
if(a<b)
{
string temp=a;
a=b;
b=temp;
ok=;
}
for(int i=len-;i>=;i--)
{
if(a[i]<b[i])
{
a[i-]-=;
a[i]+=;
}
char temp=a[i]-b[i]+'';
c=temp+c;
}
int pos=;
while(c[pos]=='' && pos<len) pos++;
if(pos==len) return "";
if(ok) return "-"+c.substr(pos);
return c.substr(pos);
}
string s1[]; int main()
{
int t;
cin>>t;
string s;
s1[] = "";s1[] = "";
for(int i = ;i <= ;i ++)
s1[i] = sub(Mult(s1[i-],),s1[i-]);
while(t--){
cin>>s;
for(int i = ;i <= ;i ++)
if(s1[i].size() > s.size()||(s1[i].size()==s.size()&&s1[i]>=s)){
cout<<s1[i]<<endl;
break;
}
}
return ;
}
HDU 6223 Infinite Fraction Path
链接:http://acm.hdu.edu.cn/showproblem.php?pid=6223
思路:bfs + 剪枝
算比较容易的bfs,一直没怎么写bfs,差点写自闭了。。。。调了半天才过。
实现代码:
#include<bits/stdc++.h>
using namespace std;
const int M = 4e5+;
#define ll long long
int vis[M]; //判断当前点是否被访问过了
int n,a[M],top;
int cnt[M]; //储存当前层被标记点的下标
int mx[M]; //每一层的最大值
struct node{
long long id;
int val,step;
};
//优先排步数小的,步数相等优先值大的
bool operator < (node a,node b){
if(a.step == b.step) return a.val < b.val;
return a.step > b.step;
}
priority_queue<node> q;
void bfs(){
int last = -;
while(!q.empty()){
node now = q.top();
q.pop();
if(now.step != last) { //已经步入下一层了清空上一层的标记
last = now.step;
while(top) vis[cnt[--top]] = ;
}
//限制条件剪枝
if(now.step == n) continue;
if(vis[now.id]) continue; //当前点被访问过了,跳过
if(mx[now.step] > now.val) continue; //当前点小于这一层的最大值,跳过
//维护标记
cnt[top++] = now.id;
vis[now.id] = ; mx[now.step] = now.val;
//将下一个点扔进队列中
node next;
next.id = (now.id*now.id+)%n;;
next.val = a[next.id];
next.step = now.step+;
q.push(next);
}
for(int i = ;i < n;i ++) printf("%d",mx[i]);
for(int i = ;i <= n;i ++) mx[i] = ;
printf("\n");
}
char s[M];
int main()
{ int maxx,t;
scanf("%d",&t);
int t1 = t;
while(t--){
top = ;
scanf("%d",&n);
maxx = ;
scanf("%s",s);
for(int i = ;i < n;i ++){
a[i] = s[i]-'';
maxx = max(maxx,a[i]);
}
mx[] = maxx;
for(int i = ;i < n;i ++)
if(a[i] == maxx){
node now; now.id = i;now.val = a[i],now.step = ;
q.push(now);
}
printf("Case #%d: ",t1-t);
bfs();
}
return ;
}
HDU 6225 Little Boxes
链接:http://acm.hdu.edu.cn/showproblem.php?pid=6225
大数加法
签到题
实现代码:
#include<bits/stdc++.h>
using namespace std; string sum(string s1,string s2)
{
if(s1.length()<s2.length())
{
string temp=s1;
s1=s2;
s2=temp;
}
int i,j;
for(i=s1.length()-,j=s2.length()-;i>=;i--,j--)
{
s1[i]=char(s1[i]+(j>=?s2[j]-'':));
if(s1[i]-''>=)
{
s1[i]=char((s1[i]-'')%+'');
if(i) s1[i-]++;
else s1=''+s1;
}
}
return s1;
}
int main()
{
int n;
string x;
cin>>n;
for(int i = ;i <= n;i ++){
string ans = "";
for(int j = ;j <= ;j ++){
cin>>x;
ans = sum(ans,x);
}
cout<<ans<<endl;
}
return ;
}
HDU 6227 Rabbits
链接:http://acm.hdu.edu.cn/showproblem.php?pid=6227
思路: 求兔子最多跳的次数,排个序,两种情况取最大的:
第一种: 第二小的和最大的之间距离之差减去中间已经有位置的值
第二种: 倒着跳,第二大的和最小的距离之差减去中间已经有位置的值
签到题
实现代码:
#include<bits/stdc++.h>
using namespace std;
int a[];
int main()
{
int t,n,x;
scanf("%d",&t);
while(t--){
scanf("%d",&n);
for(int i = ;i <= n;i ++)
scanf("%d",&a[i]);
sort(a+,a++n);
int ans = max(a[n]-a[]-n+,a[n-]-a[]-n+);
printf("%d\n",ans);
}
return ;
}
HDU 6228 Tree
链接:http://acm.hdu.edu.cn/showproblem.php?pid=6228
思路:
要求公共子集最大,我们肯定是优先选择距离大的两点染成相同的颜色(因为要留位置给其他颜色),要达到公共边最多,那么我们可以先对边进行分析,如果一条边左边结点的子树大于k,右边结点的子树也大于k那么这条边可以成为公共子集的一条因为我们是要求最大的,根据最优策略,肯定要将他加进最大公共子集中,找到这种边+1就好了。
实现代码;
#include<bits/stdc++.h>
using namespace std;
const int M = 1e5 + ;
vector<int>g[M];
int ans,n,k,siz[M];
void dfs(int u,int fa){
siz[u] = ;
for(int i = ;i < g[u].size();i ++){
int v = g[u][i];
if(v == fa) continue;
dfs(v,u);
siz[u] += siz[v];
if(siz[v] >= k&&(n-siz[v])>=k) ans++;
}
} int main()
{
int t,x,y;
scanf("%d",&t);
while(t--){
memset(siz,,sizeof(siz));
scanf("%d%d",&n,&k);
for(int i = ;i <= n;i ++)
g[i].clear();
for(int i = ;i < n;i ++){
scanf("%d%d",&x,&y);
g[x].push_back(y);
g[y].push_back(x);
}
ans = ;
dfs(,-);
printf("%d\n",ans);
}
}
2017ACM/ICPC亚洲区沈阳站-重现赛的更多相关文章
- HDU 6227.Rabbits-规律 (2017ACM/ICPC亚洲区沈阳站-重现赛(感谢东北大学))
Rabbits Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total S ...
- HDU 6225.Little Boxes-大数加法 (2017ACM/ICPC亚洲区沈阳站-重现赛(感谢东北大学))
整理代码... Little Boxes Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/O ...
- 2017ACM/ICPC亚洲区沈阳站-重现赛(感谢东北大学)
Little Boxes Problem Description Little boxes on the hillside.Little boxes made of ticky-tacky.Littl ...
- 2016ACM/ICPC亚洲区沈阳站-重现赛赛题
今天做的沈阳站重现赛,自己还是太水,只做出两道签到题,另外两道看懂题意了,但是也没能做出来. 1. Thickest Burger Time Limit: 2000/1000 MS (Java/Oth ...
- 2016ACM/ICPC亚洲区沈阳站-重现赛
C.Recursive sequence 求ans(x),ans(1)=a,ans(2)=b,ans(n)=ans(n-2)*2+ans(n-1)+n^4 如果直接就去解...很难,毕竟不是那种可以直 ...
- hdu 5510 Bazinga (kmp+dfs剪枝) 2015ACM/ICPC亚洲区沈阳站-重现赛(感谢东北大学)
废话: 这道题很是花了我一番功夫.首先,我不会kmp算法,还专门学了一下这个算法.其次,即使会用kmp,但是如果暴力枚举的话,还是毫无疑问会爆掉.因此在dfs的基础上加上两次剪枝解决了这道题. 题意: ...
- 2015ACM/ICPC亚洲区沈阳站重现赛-HDU5512-Pagodas-gcd
n pagodas were standing erect in Hong Jue Si between the Niushou Mountain and the Yuntai Mountain, l ...
- 2015ACM/ICPC亚洲区沈阳站-重现赛 M - Meeting (特殊建边,最短路)
题意:有\(n\)个点,\(m\)个集合,集合\(E_i\)中的点都与集合中的其它点有一条边权为\(t_i\)的边,现在问第\(1\)个点和第\(n\)个点到某个点的路径最短,输出最短路径和目标点,如 ...
- 2015ACM/ICPC亚洲区沈阳站-重现赛 B - Bazinga (KMP)
题意:给你\(n\)个字符串,\(s_1,s_2,...,s_n\),对于\(i(1\le i\le n)\),找到最大的\(i\),并且满足\(s_j(1\le j<i)\)不是\(s_i\) ...
随机推荐
- 开发工具|给你的项目买份保险:Python虚拟环境
读完需要 9 分钟 1. 什么是虚拟环境? 虚拟环境的意义,就如同 虚拟机 一样,它可以实现不同环境中Python依赖包相互独立,互不干扰.这在一定程度的意义上,给了我们的项目一份很有力的保障.在这里 ...
- Codeforces round 1098
Div1 530 感受到被Div1支配的恐惧了.jpg 真·一个题都不会.jpg(虽然T1是我智障 感受到被构造题支配的恐惧了.jpg A 直接树上贪心就行,是我写错了.jpg B 这个构造超级神仙有 ...
- Flask源码解读--所有可扩展点
一.前言 flask中有很多可扩展点(笔者这样称呼),其中包含了信号和请求钩子,这些信号和钩子有什么用呢?其主要作用用于帮助我们进行程序的耦合性,当然还可以让我们自定义一些行为.话不多说,通过阅读源码 ...
- 轻量级WebApi请求插件:PostMan
时间很宝贵,废话不多说,只说三句,如下: 十年河东,十年河西,莫欺骚年穷!~_~ 打错个字,应该是莫欺少年穷! 学历代表你的过去,能力代表你的现在,学习代表你的将来. 学无止境,精益求精. 本次介绍的 ...
- libgdx学习记录26——Polygon多边形碰撞检测
libgdx中Math封装了Polygon这个类,它是由多个定点进行描述实现的,在进行物体间的碰撞时,物体轮廓有时候是不规则的,这时候可以用一个多边形勾勒出其大概的轮廓,对其进行模拟. Polygon ...
- mysql下批量清空某个库下的所有表(库不要删除,保留空库)
总所周知,mysql下要想删除某个库下的某张表,只需要切换到该库下,执行语句"drop table tablename"即可删除!但若是该库下有成百上千张表,要是再这样一次次执行d ...
- nginx try_files 详解
server { listen ; server_name localhost; index index.html index.htm index.php; root /data/wwwroot; l ...
- NSCache的简单使用
简介 1)NSCache 是苹果官方提供的缓存类,用法与 NSMutableDictionary 的用法很相似,在 AFNetworking 和 SDWebImage 中,使用它来管理缓存. 2)NS ...
- 对于windows 10使用感受
windows 10是美国微软公司研发的新一代跨平台及设备应用的操作系统.在2015年7月29日12点起,windows 10推送全面开始,windows 7.windows 8 用户可以升级到win ...
- SE Springer小组之《Spring音乐播放器》可行性研究报告一、二(转载)
此文转载自组员小明处~~ 1 引言 1.1编写目的 <软件工程>课程,我们团队计划开发一个音乐播放器.本文档是基于网络上现有的音乐播放器的特点,团队计划实现的音乐播放器功能和团队 ...