A.Planting Trees

排序+模拟

常识问题,将耗时排一个序,时间长的先种,每次判断更新最后一天的时间。

代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#define Mod 1000000007
#define INT 2147483647
#define pi acos(-1.0)
#define eps 1e-3
#define lll __int64
#define ll long long
using namespace std;
#define N 100007 ll a[N]; int main()
{
int i,j,n;
ll now,t;
scanf("%d",&n);
for(i=;i<n;i++)
scanf("%lld",&a[i]);
t = ;
now = ;
sort(a,a+n);
for(i=n-;i>=;i--)
{
now = max(now,t+a[i]);
t++;
}
printf("%lld\n",now+);
return ;
}

B.Boiling Vegetables

暴力

尽可能把每份切成相等的块,这样可以使差距最小化。

枚举最大块在哪种蔬菜中产生,然后枚举切的次数,将这种蔬菜切tim次得到tim+1份,即最大块为w[i]/(tim+1),算出此时至少的基准最小块的大小,然后枚举其他蔬菜来切,也要切成最接近最大块的大小,然后判断:1.总切刀数是否大于最优Best,2.切出来的块是否小于STDMin(基准最小块大小),如果两者有一个为非,退出此次枚举,返回上层。

代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
#define N 1027 double w[N]; int main()
{
int i,j,n,tim,Best,flag;
double rati;
scanf("%lf%d",&rati,&n);
for(i=;i<=n;i++)
scanf("%lf",&w[i]);
Best = ;
for(i=;i<=n;i++) //枚举要切成最大块的那一种蔬菜
{
for(tim=;tim<Best;tim++) //枚举这种蔬菜被切的次数,不多于Best次
{
double Bigest = w[i]/(tim+); //最大块
double STDMin = Bigest*rati; //基准最小块
int Tcuts = tim;
flag = ;
for(j=;j<=n && flag;j++) //切其他的
{
if(j == i)
continue;
int Cuts = (int)ceil(w[j]/Bigest) - ; ////达到最大块以下需要切的刀数
if(w[j]/(Cuts+) < STDMin) //切Cuts刀,分成Cuts+1份后如果每份小于基准最小块
flag = ;
Tcuts += Cuts;
if(Tcuts >= Best)
flag = ;
}
if(flag && Tcuts < Best)
Best = Tcuts;
}
}
printf("%d\n",Best);
return ;
}

C.Number Trick

首先x>=10.0肯定没戏,因为首先位数就不等了。

设此数为A,有n位数,第一位为A0,则有A*X = (A - 10^(n-1))*10 + A0 (1)

进而得出:

      (2)

枚举位数n和第一位A0,得出A,再验证A是否合法:1.A/10^(n-1) = A0 (第一位是A0)2.是否满足(1)式

如果满足,输出。这题精度问题很烦。

代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#define eps 1e-5
#define ll long long
using namespace std;
#define N 2027 int main()
{
int i,n;
double x;
cin>>x;
if(x >= 10.0)
{
puts("No solution");
return ;
}
int A0;
int flag = ;
ll P = ;
for(n=;n<=;n++)
{
for(A0=;A0<=;A0++)
{
ll A = (*P-)*A0/(-x) + 0.5;
if(A/P == A0 && fabs((A-A0*P)*+A0-A*x) < eps)
{
printf("%lld\n",A);
flag = ;
}
}
P *= ;
}
if(!flag)
puts("No solution");
return ;
}

D.Robert Hood

枚举

不要被100000一点吓到了,要对题目中的数字敏感,看到坐标值在(-1000~1000)之间,并且全是整数点的时候,想到有没有平方级的复杂度。

将二维化成一维,我这里化为y轴,其实x轴y轴都是一样的,对每个y轴的坐标值,维护纵坐标为y的一条线上x坐标值最小和x坐标最大的两个值,然后在y轴上以N^2的复杂度枚举(N:最大1000)每对y=Y的线(Y为固定值),设为线A和线B,纵坐标为YA和YB,每次求A的(XAmin,YA)到B的(XBmax,YB)的距离和A的(XAmax,YA)到B的(XBmin,YB)的距离,取一个最大值,循环完后得到结果。

因为坐标值有负,所以统一加上1000。

小技巧:dis函数可以不写sqrt,到最后求出最远距离再做一次sqrt即可,可节省时间。

代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#define Mod 1000000007
#define INT 2147483647
#define lll __int64
#define ll long long
using namespace std;
#define N 2027 int vis[N],minx[N],maxx[N]; double dis(int x1,int y1,int x2,int y2)
{
return (double)sqrt((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2));
} int main()
{
int n,i,j,x,y;
memset(vis,,sizeof(vis));
scanf("%d",&n);
while(n--)
{
scanf("%d%d",&x,&y);
y += ;
if(!vis[y])
{
minx[y] = maxx[y] = x;
vis[y] = ;
}
else
{
if(minx[y] > x)
minx[y] = x;
if(maxx[y] < x)
maxx[y] = x;
}
}
double res = -Mod;
for(i=;i<=;i++)
{
if(vis[i])
{
for(j=i;j<=;j++)
{
if(!vis[j])
continue;
double dis1 = dis(minx[i],i,maxx[j],j);
double dis2 = dis(maxx[i],i,minx[j],j);
res = max(res,max(dis1,dis2));
}
}
}
printf("%.9lf\n",res);
return ;
}

E.Virus Replication

题目比较不好懂。意思是将第一个串的某些连续部分替换为某个子串使整个子串变成第二个串,求这个字串的最小长度(有可能为0)。

做法:从前往后匹配和从后往前匹配,设第一种的失配位置为low,第二种的适配位置为high(low,high的索引皆为其在第二个串的索引),则最小长度为max(0,high-low+1),但是还可能第二个串比第一个串长,这是想替换至少长度为len2-len1,所以考虑res = max(res,len2-len1)。

代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <string>
#define Mod 1000000007
#define INT 2147483647
using namespace std;
#define N 1027 int main()
{
string a,b;
while(cin>>a>>b)
{
int i,j;
int len1 = a.length();
int len2 = b.length();
int low = ;
int high = len2-;
for(i=;i<len1&&i<len2;i++)
{
if(a[i] != b[i])
break;
low++;
}
j = len1-;
for(i=len2-;i>=&&j>=;i--,j--)
{
if(a[j] != b[i])
break;
high--;
}
int res = max(,high-low+);
res = max(res,len2-len1);
printf("%d\n",res);
}
return ;
}

F.Timebumb

模拟题。比较水。

一个一个处理数字,将数字的15个点编号0~15,如果某点为‘*’,则编号1,否则编号0,。如果发现某个数字处不是数字的正确形式,则直接爆炸。否则统计看是否能模6为0.

代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <cstdlib>
#include <string>
using namespace std;
#define N 100007 char ss[][];
int vis[][];
string val[] = {"","","","","","","","","",""};
string vis_to_01(int VIS[])
{
int i;
string res = "";
for(i=;i<;i++)
{
if(VIS[i] == )
res += '';
else
res += '';
}
return res;
} int main()
{
int i,j,k;
int len;
for(i=;i<;i++)
{
gets(ss[i]); }
len = strlen(ss[]);
int ind,lefti;
char dig[];
for(lefti=,ind=;lefti<=len-;lefti+=,ind++)
{
int k = ;
for(i=;i<;i++)
{
for(j=lefti;j<lefti+;j++)
{
if(ss[i][j] == '*')
{
vis[ind][k] = ;
}
else
vis[ind][k] = ;
k++;
}
}
}
int flag = ;
for(i=;i<ind;i++)
{
string now = vis_to_01(vis[i]);
for(j=;j<;j++)
{
if(val[j] == now)
{
dig[i] = j + ;
break;
}
}
if(j == )
{
flag = ;
break;
}
}
int ka = atoi(dig);
if(!flag || ka% != )
puts("BOOM!!");
else
puts("BEER!!");
return ;
}

G.Erase Securely

水。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <cstdlib>
#include <string>
using namespace std;
#define N 100007 int main()
{
int n,i,len;
string a,b;
int flag;
scanf("%d",&n);
cin>>a>>b;
if(n%)
flag = ;
else
flag = ;
len = a.length();
for(i=;i<len;i++)
{
if(flag)
{
if(a[i] == b[i])
{
break;
}
}
else
{
if(a[i] != b[i])
break;
}
}
if(i == len)
puts("Deletion succeeded");
else
puts("Deletion failed");
return ;
}

H.Pinball

I.Dance Reconstruction

J.Dartboard

微积分题。

代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#define eps 1e-3
using namespace std;
#define N 100007 double theta;
double calc(double r1,double r2)
{
return exp(-(r1*r1)/(*theta*theta)) - exp(-(r2*r2)/(*theta*theta));
} int main()
{
double r1,r2,r3,r4,r5,r6;
scanf("%lf%lf%lf%lf%lf%lf",&r1,&r2,&r3,&r4,&r5,&r6);
scanf("%lf",&theta);
double res = 50.0*calc(,r1) + 25.0*calc(r1,r2) + 10.5*calc(r2,r3) + 31.5*calc(r3,r4) + 10.5*calc(r4,r5) + 21.0*calc(r5,r6);
printf("%lf\n",res);
return ;
}

K.Cliff Work

(没做出来的以后持续更新)

2014 UESTC 暑前集训队内赛(1) 解题报告的更多相关文章

  1. 2014 UESTC 暑前集训队内赛(3) 部分解题报告

    B.Battle for Silver 定理:完全图Kn是平面图当且仅当顶点数n<=4. 枚举所有完全图K1,K2,K3,K4,找出最大总权重. 代码: #include <iostrea ...

  2. 2014 UESTC 暑前集训队内赛(2) 部分解题报告

    B.Cuckoo for Hashing 模拟题. 代码: #include <iostream> #include <cstdio> #include <cstring ...

  3. 2014 UESTC暑前集训数据结构专题解题报告

    A.Islands 这种联通块的问题一看就知道是并查集的思想. 做法:从高水位到低水位依序进行操作,这样每次都有新的块浮出水面,可以在前面的基础上进行合并集合的操作.给每个位置分配一个数字,方便合并集 ...

  4. 2014 UESTC暑前集训搜索专题解题报告

    A.解救小Q BFS.每次到达一个状态时看是否是在传送阵的一点上,是则传送到另一点即可. 代码: #include <iostream> #include <cstdio> # ...

  5. 2014 UESTC暑前集训动态规划专题解题报告

    A.爱管闲事 http://www.cnblogs.com/whatbeg/p/3762733.html B.轻音乐同好会 C.温泉旅馆 http://www.cnblogs.com/whatbeg/ ...

  6. 2014 UESTC暑前集训图论专题解题报告

    A.方老师和缘分 http://www.cnblogs.com/whatbeg/p/3765621.html B.方老师和农场 http://www.cnblogs.com/whatbeg/p/376 ...

  7. HDU 4869 Turn the pokers (2014多校联合训练第一场1009) 解题报告(维护区间 + 组合数)

    Turn the pokers Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  8. 冲刺Noip2017模拟赛2 解题报告——五十岚芒果酱

    题1 牛跑步(running) [题目描述] 新牛到部队,CG 要求它们每天早上搞晨跑,从 A 农场跑到 B 农场.从 A 农场到 B 农场中有 n- 个路口,分别标上号,A 农场为 号,B 农场为 ...

  9. 20161005 NOIP 模拟赛 T2 解题报告

    beautiful 2.1 题目描述 一个长度为 n 的序列,对于每个位置 i 的数 ai 都有一个优美值,其定义是:找到序列中最 长的一段 [l, r],满足 l ≤ i ≤ r,且 [l, r] ...

随机推荐

  1. 安装多JDK后,java编译环境和运行环境版本(JDK版本) 不一致解决:

    由于之前安装过JDK1.7 ,现在一个项目是JDK1.5的,那么需要更改了环境变量了,此处不再赘述如何设置JDK 的环境变量了.然后网上找来方法: 在安装多个jdk后,出现了java -version ...

  2. Vue表单

    gitHub地址: https://github.com/lily1010/vue_learn/tree/master/lesson11 一 vue表单 实在是太简单了,直接来个例子 <!DOC ...

  3. sap透明表、结构、簇介绍以及查找表方法

    sap透明表.结构.簇介绍以及查找表方法 一些人在写开发功能说明书的时候不知道如何去找屏幕字段对应的透明表,下面我来介绍一个比较有效的方法:首先简单介绍一下概念:在SAP中的表的种类有以下三种:Tra ...

  4. Sharepoint学习笔记—习题系列--70-573习题解析 -(Q127-Q130)

    Question 127You create a custom list named Products.You need to perform a Representational State Tra ...

  5. Mac下利用(xcode)安装git

    Mac下利用(xcode)安装git 一.AppStore 最安全途径:搜索下载Xcode,(需要AppleID). 其他:直接百度Xcode下载. 二.Xcode 打开Xcode-->Pref ...

  6. RunLoop机制理解

    一.浅识RunLoop RunLoop在开发中我们一直在用,但是没有注意他.要想理解RunLoop,首先我们需要先了解一下程序运行机制. 程序运行机制:我们都知道OC是运行时语言,也就是说对象的类型是 ...

  7. iOS沙盒简单介绍

    先简单介绍一下什么是沙盒:你可以简单理解成为一个目录,这个目录的改动不会对操作系统造成任何损失.(这里也有一点点介绍) 看看苹果的沙盒目录: 再附一张苹果官方的图 一个iOS app操作都是在自己的沙 ...

  8. Android线程管理(二)——ActivityThread

    线程通信.ActivityThread及Thread类是理解Android线程管理的关键. 线程,作为CPU调度资源的基本单位,在Android等针对嵌入式设备的操作系统中,有着非常重要和基础的作用. ...

  9. 斯坦福iOS7公开课7-9笔记及演示Demo

    这一部分主要介绍了iOS的绘图.手势.协议.block.力学特效动画(包括重力.碰撞.吸附等)以及自动布局的内容. 1.绘图.手势 (1)调用一个自定义的UIView时,可以使用awakeFromNi ...

  10. C语言-03-流程控制

    一.选择结构 1> if语句 使用注意 ① if语句中的条件语句,不要把==和=弄混,可以把常量作为左值, 这样的话,在无用=的情况下,编译时会报错 ② if语句后若要定义新的变量或者有多条语句 ...