1. 程式人生 > >https://acm.ecnu.edu.cn(2018 11 16)

https://acm.ecnu.edu.cn(2018 11 16)

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;
}