(Training 11)Codeforces Round #691

A. Red-Blue Shuffle

只要看谁大的数量多即可

#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=1e6+10;
int a[N],b[N];
int main(){
	int T;
	scanf("%d",&T);
	while(T--){
		int n;
		scanf("%d",&n);
		string a,b;
		cin>>a>>b;
		int red=0,bule=0;
		for(int i=0;i<n;i++){
			if(a[i]>b[i])red++;
			else if(b[i]>a[i])bule++;
		}
		if(red>bule)puts("RED");
		else if(bule>red)puts("BLUE");
		else puts("EQUAL");
	}
}

B. Move and Turn

思路: 我们分别观察在某步时可达的x和y
如果现在是第n步 且n偶数 因为每次走了横纵标后一定要走纵坐标 所以 令k=n/2 而我们可以到达的横坐标只能为 -k -k+2 -k+4 …k 可以知道能到的坐标数量为k+1 反观纵坐标依然如此 通过乘法原则 方案数为(k+1)(k+1)
当步数为奇数时 如果 横坐标少走一次依然设 k=n/2 那么他为k+1 而纵坐标的方案就变味了n-k+1 因为横坐标和纵坐标可以交换 那么ans = (k+1)
(n-k+1)*2
后续把k替换即可


#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=1e6+10;
typedef long long LL;
int main(){
	LL n;
	cin>>n;
	if(n&1)cout<<(n/2+1)*(n-n/2+1)*2;
	else cout<<(n/2+1)*(n/2+1);
    return 0;
}

C - Row GCD

思路:写过线段树维护区间GCD的同学应该能很快写出来
而这里是对整个区间 那么我们直接用差分数组
来求解整个的GCD
如果要对整个数组加上d只需要对数组开头加上d即可
再来重新求得GCD等于多少

#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=1e6+10;
typedef long long LL;
LL a[N],b[N];
LL Gcd(LL x,LL y){
	return y?Gcd(y,x%y):x;
}
int main(){
	int n,m;
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		scanf("%lld",&a[i]);
	}
	LL gcd=a[2];
	for(int i=3;i<=n;i++){
		gcd=Gcd(gcd,a[i]-a[i-1]);//差分 
	}
	for(int j=1;j<=m;j++){
		LL x;
		scanf("%lld",&x);
		printf("%lld ",abs(Gcd(a[1]+x,gcd)));
	}
 
}

D. Glass Half Spilled

思路:没想到居然是个二维的背包问题
dp i j k表示前i个杯子选择 j个 剩余k体积时的最大含水量
这里我们要用滚动数组
随后没有被选的被子的含水量就是总水量 sum-dp[j][k]
而选择i个时最大值就为 min(j*1.0,(sum-f[i][j])/2.0)+f[i][j]

#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long LL;
int f[105][10005];
double ans[105];
int a[105],b[105];
int main(){
	int n;
	scanf("%d",&n);
	int sum=0;
	for(int i=1;i<=n;i++){
		scanf("%d%d",&a[i],&b[i]);
		sum+=b[i];
	}
	memset(f,0xcf,sizeof f);
	for(int i=0;i<=n;i++)
	f[i][0]=0;
	for(int i=1;i<=n;i++)//前i个杯子
		for(int j=i;j>=1;j--)//选择j个
		 	for(int k=100*j;k>=a[i]-b[i];k--)//滚动数组枚举选下i的剩余容量 
		 	f[j][k]=max(f[j][k],f[j-1][k-a[i]+b[i]]+b[i]);//选i的情况下的最大的b的总和  
	for(int i=1;i<=n;i++)
		for(int j=0;j<=100*i;j++){
			ans[i]=max(ans[i],f[i][j]+min(j*1.0,(sum-f[i][j])/2.0));
		}
		
	for(int i=1;i<=n;i++)
		printf("%.10lf ",ans[i]);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
旋转变压器---数字转换器作为现代伺服系统中被广泛使用的角位置测量系统,大量应用于高精度及大中型数控系统、机器人控制、工业控制、武器火力控制及惯性导航领域中。 传统的角测量系统面临的问题有:体积、重量、功耗偏大,调试、误差补偿试验复杂,费用较高。本文从微型化、智能化的方向进行研究,是解决传统角测量系统所面临问题的好途径。 本文所研究的旋转变压器---数字转换器是由信号调理模块、系统芯片C8051F064和输出控制模块组成的。整个系统的三路输入信号为X=AsinOcosar、Y=Acosθcos ot和Z=Ucosar(基准信号),输出信号为偏转角θ,输出形式为16 位数字量。信号调理模块是由模拟电路组成的,包括信号输入电路、相敏整流电路、滤波电路和直流稳压电源电路,其难点在于相敏整流电路的设计。信号调理模块的主要功能是把输入的交流信号X=AsinOcosor、Y=Acosθcosot转变成直流信号Bsinθ和Bcosθ,并使输出的直流信号在0~2.4V之间;系统芯片C8051F064是CYGNAL公司近年来推出的一款功能齐全的完全集成的混合信号片上系统型单片机。在本文所设计的系统中,系统芯片的输入信号为直流信号Bsinθ和Bcosθ,通过片内自带的2个16位A/D转换器对输入信号的数据进行采样和转换,并对转换完的数据进行滤波处理,以减小由于外界干扰而产生的误差,再用除法和反正切函数解算出偏转角θ的16位数字量;输出控制模块主要完成的功能是通过UARTO向计算机实时发送由单片机计算出来的偏转角度0的16位数字量,而串口的RS-232电平与单片机系统采用的是TTL电平之间的转换所采用的转换芯片是MC1488和MC1489。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值