Codeforces Round #542 [Alex Lopashev Thanks-Round] (Div. 2)

A. Be Positive 

题意:给出一个数组 每个树去除以d(d!=0)使得数组中大于0的数 大于ceil(n/2) 求任意d

思路:数据小 直接暴力就完事了

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 const int maxn=500;
 4 double a[maxn];
 5 int main(){
 6     int n;
 7     scanf("%d",&n);
 8     for(int i=0;i<n;i++){
 9         scanf("%lf",&a[i]);
10     }
11     int temp=ceil(n*1.0/2);
12     for(int i=-1e3;i<=1e3;i++){
13         if(i==0)continue;
14         int flag=0;
15         for(int j=0;j<n;j++){
16             if(a[j]/i>0){
17                 flag++;
18                 
19             }
20         }
21         if(flag>=temp){
22             printf("%d\n",i);
23             return 0;
24         }
25     }
26     printf("0\n");
27     return 0;
28 }
View Code

B. Two Cakes

题意:给出一个1-n的数组 每个数字都出现两编  两个人 每个人从1--n开始按大小选择数字(代价为数组上走多远距离)  每个数字只能选择一次  问最少要走多久

思路:把每个数的位置记一下 然后直接算上一个位置到下一个位置的最小和是多少 例如 要算2 的 直接算2个1分别到两个2的两种情况即可,因为这是无后效性的

枚举到哪个数字 当前时刻两个人肯定在上一个位置 例如要到n时两个人肯定在n-1出发

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 const int maxn=500;
 4 double a[maxn];
 5 int main(){
 6     int n;
 7     scanf("%d",&n);
 8     for(int i=0;i<n;i++){
 9         scanf("%lf",&a[i]);
10     }
11     int temp=ceil(n*1.0/2);
12     for(int i=-1e3;i<=1e3;i++){
13         if(i==0)continue;
14         int flag=0;
15         for(int j=0;j<n;j++){
16             if(a[j]/i>0){
17                 flag++;
18                 
19             }
20         }
21         if(flag>=temp){
22             printf("%d\n",i);
23             return 0;
24         }
25     }
26     printf("0\n");
27     return 0;
28 }
View Code

C. Connect

题意:给出一张图 可以在不同连通快之间做通道 但是会消耗 算术距离的代价 问最小代价是多少

思路: 图很小 只有50*50 所以直接把起点和终点的连通的快的坐标记下来 然后暴力求最小代价即可

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 const int maxn=60;
 4 int  n;
 5 char mp[maxn][maxn];
 6 int vis[maxn][maxn];
 7 struct Node{
 8     int x,y;
 9 }s1[maxn*maxn],s2[maxn*maxn];
10 int dy[]={
11     1,-1,0,0
12 };
13 int dx[]={
14     0,0,-1,1
15 };
16 void dfs(int x,int y,int num){
17     vis[x][y]=num;
18     for(int i=0;i<4;i++){
19         int tx=x+dx[i],ty=y+dy[i];
20         if(tx<1||tx>n||ty<1||ty>n)continue;
21         if(vis[tx][ty]!=0||mp[tx][ty]=='1')continue;
22         dfs(tx,ty,num);
23     }
24 }
25 
26 int dist(int x1,int y1,int x2,int y2){
27     return (x1-x2)*(x1-x2)+(y1-y2)*(y1-y2);
28 }
29 int main(){
30      
31     scanf("%d",&n);
32     int sx,sy,tx,ty;
33     scanf("%d%d%d%d",&sx,&sy,&tx,&ty);
34     for(int i=1;i<=n;i++){
35         scanf("%s",mp[i]+1);
36     }
37     
38     int temp=1;
39     memset(vis,0,sizeof(vis));
40     for(int i=1;i<=n;i++){
41         for(int j=1;j<=n;j++){
42             if(vis[i][j]==0&&mp[i][j]=='0'){dfs(i,j,temp);temp++;}
43         }
44     }
45     if(vis[sx][sy]==vis[tx][ty]){
46         printf("0\n");
47         return 0;
48     }
49     int num1=0,num2=0;
50         for(int i=1;i<=n;i++){
51         for(int j=1;j<=n;j++){
52             if(vis[i][j]==vis[sx][sy]){
53                 s1[num1].x=i,s1[num1++].y=j;
54             }
55             if(vis[i][j]==vis[tx][ty]){
56                     s2[num2].x=i,s2[num2++].y=j;
57             }
58         }
59     }
60         int ans=maxn*maxn*2;
61         for(int i=0;i<num1;i++){
62             for(int j=0;j<num2;j++)
63             {
64                 ans=min(ans,dist(s1[i].x,s1[i].y,s2[j].x,s2[j].y));
65             }
66         }
67         cout<<ans<<endl;
68     return 0;
69 }
View Code

D2. Toy Train

题意:一个1-n的圈 火车在这个圈上顺时针旋转 每个点有 任务:把该点的糖果送到 另外一个点去    在一个点上只能往上装一个糖果,但是可以卸下任意个 

问从每个点出发 所需要的最短时间    直接把每个点从1号出发所需要的最长时间预处理一下 然后从1号点枚举 这样每个点的时间就是 最长时间减去  枚举到的起点和1之间的距离

思路: 对于一个点x假设有k个任务  那么 当前点最少需要走 完整圈(k-1)圈 然后走剩下的那个点 

time=  (k-1) *n +  dist(start,x) +dist(x,最后一个要送的点)

所以起点选择和x点相同 最后一个点在顺时针方向上离x点最近 可以得到最小时间

暴力每个点即可

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 const int maxn=20000+5;
 4 int len[maxn],b[maxn],ans[maxn];
 5 vector<int>a[maxn];
 6 multiset<int>s;
 7 int main(){
 8     int n,m;
 9     scanf("%d%d",&n,&m);
10     int x,y;
11     for(int i=0;i<m;i++){
12         scanf("%d%d",&x,&y);
13         if(x>y)y+=n;
14         a[x].push_back(y);
15     }
16     for(int i=1;i<=n;i++){
17         if(a[i].size()==0)len[i]=0;
18         else {
19             sort(a[i].begin(),a[i].end());
20             len[i]=a[i][0]+(a[i].size()-1)*n;
21         }
22         s.insert(len[i]);
23     }
24     for(int i=1;i<=n;i++){
25         ans[i]=*(--s.end())-i;
26         if(len[i]!=0){
27             s.erase(s.find(len[i]));
28         s.insert(len[i]+n);
29         }
30     }
31     for(int i=1;i<=n;i++)printf("%d ",ans[i]);
32 
33     return 0;
34 }
View Code

 

转载于:https://www.cnblogs.com/ttttttttrx/p/10695729.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CSDN IT狂飙上传的代码均可运行,功能ok的情况下才上传的,直接替换数据即可使用,小白也能轻松上手 【资源说明】 基于MATLAB实现的有限差分法实验报告用MATLAB中的有限差分法计算槽内电位;对比解析法和数值法的异同点;选取一点,绘制收敛曲线;总的三维电位图+使用说明文档 1、代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2020b;若运行有误,根据提示GPT修改;若不会,私信博主(问题描述要详细); 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可后台私信博主; 4.1 期刊或参考文献复现 4.2 Matlab程序定制 4.3 科研合作 功率谱估计: 故障诊断分析: 雷达通信:雷达LFM、MIMO、成像、定位、干扰、检测、信号分析、脉冲压缩 滤波估计:SOC估计 目标定位:WSN定位、滤波跟踪、目标定位 生物电信号:肌电信号EMG、脑电信号EEG、心电信号ECG 通信系统:DOA估计、编码译码、变分模态分解、管道泄漏、滤波器、数字信号处理+传输+分析+去噪、数字信号调制、误码率、信号估计、DTMF、信号检测识别融合、LEACH协议、信号检测、水声通信 5、欢迎下载,沟通交流,互相学习,共同进步!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值