HPU 18级个人积分赛--first
K.Class 思路:水题秒之。
#include<bits/stdc++.h>
using namespace std;
int main(){
int x,y;
cin>>x>>y;
long long int a = (x+y)/2;
long long int b = (x-y)/2;
cout<<a*b<<endl;
return 0;
}
J. Worker 思路:我们仔细分析一下题意,给了n个厂,m个人,假设每个厂的福利原因使得工人的工作能力不同,然后你要把这m个人分给n个厂,使得每个厂的总效益相同。给厂分人,肯定是福利不好效益低的厂多分几个人,然后效益高的人少。如何实现这个决策呢?***求最小公倍数!!!***所有厂效益的最小公倍数,然后用这个最小公倍数挨个求得是每个厂效益的多少倍并累加。如果工人数对这个倍数取余 == 0;则说明可以实现这样的一种分配!
#include<bits/stdc++.h>
#define maxn 1005
using namespace std;
typedef long long LL;
LL n,m;
LL a[maxn],b[maxn];
int gcd(LL a,LL b)
{
return b?gcd(b,a%b):a;
}
int lcm(LL a,LL b)
{
return (a*b)/gcd(a,b);
}
int main()
{
while(~scanf("%lld %lld",&n,&m))
{
LL flag=1;
for(LL i=1;i<=n;i++)
{
scanf("%lld",&a[i]);
flag=lcm(max(flag,a[i]),min(flag,a[i]));
}
LL sum=0;
for(LL i=1;i<=n;i++)
{
b[i]=flag/a[i];
sum+=b[i];
}
if(m%sum!=0)
{
printf("Non");
continue;
}
printf("Yesn");
LL beishu=m/sum;
for(LL i=1;i<=n;i++)
{
if(i==1)
printf("%lld",b[i]*beishu);
else
printf(" %lld",b[i]*beishu);
}
printf("n");
}
return 0;
}
I.Budget
思路:这个题卡的是精度,因为是1e18,所以double也存放不下。得用字符串来解决!
#include<bits/stdc++.h>
//#define maxn 1005
//double a[maxn];
//double b[maxn];
using namespace std;
int main(){
int n;
string a;
long double sum =0;
while(cin>>n){
for(int i =0;i<n;i++){
cin>>a;
int len = a.length();
if(a[len-1] >='5'){
sum += 58 - a[len-1];
}
else
sum -= a[len-1]-'0';
}
sum /=1000.0;
cout<<fixed<<setprecision(3)<<sum<<endl;
}
return 0;
}
H.RNG 思路:主要是式子的推导过程,因为正面想比较困难,所以我们可以从反面求他们不相交的概率,及第一个选取的区间的左边界小于第二个选取的区间的右边界。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod = 1e9+7;
ll pow(ll a, ll n){
ll res = 1;
while(n){
if(n & 1)
res = res * a %mod;
a = a * a %mod;
n >>= 1;
}
return res;
}
int main(){
ll n;
while(cin>>n){
cout<<(n+1)*pow(2*n,mod-2)%mod<<endl;
}
return 0;
}
G.Traffic 思路:首先要理解题意,一开始我就把题的意思搞错了,然后思路搞偏了好远。是东西方向的车不用做变化,要南北方向的车全部都等待相同的时间然后这样进行通过时不相撞。那我们就可以把东西方向的读入的时候记得标记一下,然后就行一个对时间从1到无穷的一个死循环,如果存在一个时间使得所有的南北方向的车在通过时均都不和东西方向的车互撞,那么就输出这个时间,并打破循环即可!
#include<bits/stdc++.h>
#define maxn 3005
int a[maxn],b[maxn];
//int flag[maxn];
int flag;
using namespace std;
int main(){
int n,m;
while(cin>>n>>m){
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
for(int i=0;i<n;i++){
cin>>flag;
a[flag] = 1;//标记什么时间段有车;
}
for(int i=0;i<m;i++)
cin>>b[i];
for(int i=0;;i++){
int flag1= 0;
for(int j=0;j<m;j++){
if(a[b[j]+i] == 0)
flag1++;
}
if(flag1 == m) {
cout<<i<<endl;
break;
}
}
}
return 0;
}
F.String
思路:水体秒之(伤心,我们GCD的模板敲错了,导致W了好几次)检查半天,还以为思路有问题,结果只是水体一道!
#include<bits/stdc++.h>
#define maxn 105
char a[maxn];
using namespace std;
int gcd(int a,int b){
return b? gcd(b,a%b ):a;
}
int main(){
int n;
//getchar();
while(~scanf("%d",&n)){
for(int i=0;i<n;i++)
cin>>a[i];
int num1=0,num2=0,num3=0,num4=0;
long long int sum;
for(int i =0;i<n;i++){
if(a[i] == 'a')
num1++;
if(a[i] == 'v')
num2++;
if(a[i] == 'i')
num3++;
if(a[i] =='n')
num4++;
}
sum = num1*num2*num3*num4;
long long int sum1 = n*n*n*n;
if(sum == 0) cout<<"0/1"<<endl;
else{
int yue = gcd(sum,sum1);
cout<<sum/yue<<"/"<<sum1/yue<<endl;
}
}
return 0;
}
以上就是我做的几道水体;
A. Cotree 思路:对于每棵树进行换根dp,对每棵子树找到一个点使得所有点到这个点的距离和最小,连接这两个点,然后进行一次DFS统计每条边的贡献,累加即可。(学长写的题解是这样的,nuonuo表示看不懂,对不起,我太弱了!)
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5+100;
vector<long long> G[N];
int n,n1,n2;
bool vis[N];
long long ans;
void dfs1(int x){
if(vis[x]) return ;
vis[x]=1;
for(auto v:G[x]){
dfs1(v);
}
}
int ta,tb,now;
long long dp[N];long long siz[N];
void dfs2(long long u,long long fa){
siz[u]=1;
for(auto v:G[u]){
if(v==fa) continue;
dfs2(v,u);
siz[u]+=siz[v];
dp[u]+=dp[v];
}
dp[u]+=siz[u];
}
void dfs3(long long u,long long fa){
if(ans>dp[u]){
ans=dp[u];
now=u;
}
for(auto v:G[u]){
if(v==fa) continue;
long long res=dp[u]-dp[v]-siz[v];
dp[v]=(dp[v]+res+n1-siz[v]);
dfs3(v,u);
}
}
void dfs4(long long u,long long fa){
if(ans>dp[u]){
ans=dp[u];
now=u;
}
for(auto v:G[u]){
if(v==fa) continue;
long long res=dp[u]-dp[v]-siz[v];
dp[v]=(dp[v]+res+n2-siz[v]);
dfs4(v,u);
}
}
long long final=0;
void dfs(int now,int fa){
final+=siz[now]*(n-siz[now]);
for(auto v:G[now]){
if(v==fa) continue;
dfs(v,now);
}
}
int main(){
//freopen("1.in","r",stdin);
cin>>n;
int u,v;
for(int i=1;i<=n-2;i++){
cin>>u>>v;
G[u].push_back(v);
G[v].push_back(u);
}
int a,b;//找到左子树的一个点和右子树的一个点
a=1;dfs1(1);
for(int i=2;i<=n;i++){
if(!vis[i]){
b=i;n2++;
}
}
n1=n-n2;
ans=99999999999999;
now=a;
dfs2(a,0);
dfs3(a,0);
ta=now;
memset(dp,0,sizeof(dp));
memset(siz,0,sizeof(siz));
ans=99999999999999;
now=b;
dfs2(b,0);
dfs4(b,0);
tb=now;
G[ta].push_back(tb);
G[tb].push_back(ta);
memset(dp,0,sizeof(dp));
memset(siz,0,sizeof(siz));
dfs2(1,0);
dfs(1,0);
cout<<final<<endl;
return 0;
}
D.Wave 思路:这个题是我最后看的,我感觉是剩下来的里面最简单的了。题目意思也比较容易理解,但是并没有时间去解决他了,而且过的人数也不是特别的多。当时也没什么思路,只是单纯的感觉简单额鹅鹅鹅~~
那么让我们来欣赏一下我们伟大的学长的代码吧~
思路:任意两个数的位置存一下,然后我们进行暴力枚举即可!
#include<bits/stdc++.h>
const int maxn=1e5+5;
typedef long long ll;
using namespace std;
vector<int>vec[105];
int main()
{
int n,c;
cin>>n>>c;
int x;
for(int t=1;t<=n;t++)
{
scanf("%d",&x);
vec[x].push_back(t);
}
int ans=0;
for(int t=1;t<=c;t++)
{
for(int j=1;j<=c;j++)
{
if(t==j)continue;
int s1=vec[t].size();
int s2=vec[j].size();
int st1=0,st2=0;
int temp=0;
int sum=0;
for(;;)
{
while(st1<s1&&vec[t][st1]<temp)
{
st1++;
}
if(st1==s1)
{
break;
}
temp=vec[t][st1];
sum++;
while(st2<s2&&vec[j][st2]<temp)
{
st2++;
}
if(st2==s2)
{
break;
}
sum++;
temp=vec[j][st2];
}
ans=max(ans,sum);
}
}
printf("%dn",ans);
return 0;
}
- SNA中:中心度及中心势诠释(不完整代码)
- 教程 | 基于计算机视觉使用Python和OpenCV计算道路交通
- 干货 | MVP模式在携程酒店的应用和扩展
- memlock过低导致的数据库性能问题(r6笔记第10天)
- OpenCV和SVM分类器在自动驾驶中的车辆检测
- 自动驾驶的模型预测控制
- 【专业技术】使用html5的十大原因
- 第五课:推理结果的可视化
- 第四课:模型的使用
- 【Java概念学习】--数组的初始化
- linux下重命名文件或文件夹使用mv既可实现。
- 第三课:把tensorflow,模型和测试数据导入Android工程
- D-Link 路由器信息泄露和远程命令执行漏洞分析及全球数据分析报告
- Wordpress安全架构分析
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 树莓派基础实验36:通用串口通信实验
- PIMPL:休想窥探我的隐私!
- 树莓派基础实验37:pyserial模块通信实验
- 【答疑解惑】为什么你的 Charles 会抓包失败?
- Mybatis-generator 逆向工程 自定义PO,xml,mapper,example
- 高速上云/网络穿透/视频上云网关EasyNTS组网服务登录状态检测优化记录
- 树莓派基础实验38:逻辑分析仪分析PWM、UART信号
- 【终端设备】视频上云/网络穿透EasyNTS云组网硬件终端无法单独修改账号的优化方式
- 测试环境问题排查的那些事儿
- RTSP流媒体协议视频平台EasyNVR和EasyNTS智能云组网同一浏览器运行为什么会导致EasyNTS无法登陆?
- Java:手写线程安全LRU缓存X探究影响命中率的因素
- 视频上云/网络穿透/网络映射服务EasyNTS设备管理为什么会出现无法搜索到设备的情况?
- 快速打造属于你的接口自动化测试框架
- 大数据下的质量体系建设
- PostgreSQL 日志系统 及 设置错误导致磁盘塞满案例