概述
A 心与心的距离
近在咫尺,远在天边。心与心的距离的量度,往往不如欧氏距离般浅显,而十分令人困扰。
斯蒂芬妮·孔茨在奥利匹亚沃什的长青州立学院教历史和家庭研究学。其代表作《婚姻·历史:爱情如何征服婚姻》中讨论了这一问题。她说:
人类喜欢看爱情故事,但在过去,人们几乎没有活在爱情之中。
这是事实,因为在过去的很长一段时间内,婚姻几乎总是与经济状况、工作、抚养子女相关,而并非依赖于爱情。当前普遍的爱情关系与上世纪 50 年代出现。有人认为,这与电影电视剧等娱乐行业的技术变革和蓬勃发展密切相关;也有人认为,这是因为宗教的衰落,工作不稳定性的不断增强,以及流动人口的增多——更多的人倾向于在城市间奔波,而不是待在同一个地方。
亲密关系已然成为新的宗教。从爱情中,人们获得自我价值的验证与实现,找到自己存在的意义,已经获得他们以前从家庭生活或社区生活中获得的归属感。而且,流行文化始终传达着这样一种信息:人人都会遇到那个命中注定的人,并收获幸福。
回到最初的问题,我们必须意识到,我们生活在一个强调个性 (Individuality),自主 (Autonomy) 和实现个人目标 (Personal Goals) 的时代。这意味着现代情侣往往需要既团结又独立,既有归属感又有自由感。
假设一个个体 b 的个性、自主、个人目标可以用三个非负整数 Ib, Ab, Gb 来衡量;另一个人 g 也用三个非负整数 Ig, Ag, Gg 来衡量。那么我们可以建立一种精妙的数学模型,来衡量他们心与心的距离:
distance(b,g)=max{|Ib−Ig|,|Ab−Ag|,|Gb−Gg|}⊕Ib⊕Ig⊕Ab⊕Ag⊕Gb⊕Gg
其中 max{S} 表示 S 中最大的元素, |x| 表示 x 的绝对值,⊕ 表示位异或运算。
有关位异或的解释可见维基。在 C++、Python 语言中,表示为 ^
。
现给出 distance(b,g),要求还原出 Ib, Ab, Gb, Ig, Ag, Gg 这六个变量。
输入
第一行是一个正整数 T (1≤T≤2 000),表示下面有 T 组数据。
接下来 T 行每行为一个 distance(b,g),这是一个不超过 2 000 的非负整数。
输出
对于每组数据,首先输出 Case #x:
其中 x
是从 1 开始的测试数据编号。
然后输出六个整数,依次为 Ib,Ig,Ab,Ag,Gb,Gg (0≤Ib,Ig,Ab,Ag,Gb,Gg≤106)。
如有多解输出任意一解。如果找不到任意一解,输出 NO
。
样例
Input
3 6 0 4
Output
Case #1: 3 1 2 4 3 3 Case #2: 1 2 1 2 1 3 Case #3: 3 2 5 4 3 5
思路:二进制异或,相同异或为0,不同异或为1, a^b^b还是a,所以让a与c相等,b d相等,e f 相等,就是让最大值后面的异或为0.
#include <algorithm>
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <cstdlib>
#include <map>
#include <deque>
const int M=200000+10;
using namespace std;
typedef long long ll;
int main()
{
ll t,n,a,b,c,d,e,f,i;
cin>>t;
for(i=1;i<=t;i++)
{
cin>>n;
a=n,b=0,c=a,d=0,e=n,f=n;
cout<<"Case #"<<i<<": ";
cout<<a<<" "<<b<<" "<<c<<" "<<d<<" "<<e<<" "<<f<<endl;
}
return 0;
}
B. 转机折扣
一句话题意:给出等长的两个字符串 s 和 t,要求一个与他们等长的字符串字典序比其中一个大,但比另外一个小。
输入
输入两行两个等长的非空字符串 s, t。长度不超过 105,由英文大写字母组成。
输入保证有解。
输出
输出一个与输入的字符串等长的字符串,也由英文大写字母组成。如果有多解,输出任意一解。
样例
Input
SHA PVG
Output
PZI
Input
ZSPD ZSSS
Output
ZSQD
思路:看最后一位是不是Z,是的话往前看,让不是的加1,是z的赋A.
#include <algorithm>
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <cstdlib>
#include <map>
#include <deque>
const int M=200000+10;
using namespace std;
typedef long long ll;
int main()
{
char s1[100010],s2[100010],s3[100010];
ll n,j,i;
cin>>s1>>s2;
n=strlen(s1);
if(strcmp(s1,s2)>0)
{
strcpy(s3,s1);
strcpy(s1,s2);
strcpy(s2,s3);
}
for(i=n-1; i>=0;)
{
if(s1[i]=='Z')
i--;
else
{
s1[i]++;
for(j=i+1; j<n; j++)
s1[j]='A';
break;
}
}
cout<<s1<<endl;
return 0;
}
最后
以上就是飞快大象为你收集整理的https://acm.ecnu.edu.cn(2018 11 16)的全部内容,希望文章能够帮你解决https://acm.ecnu.edu.cn(2018 11 16)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复