1. 程式人生 > >Codeforces - Gym102028 - 2018-2019 ACM-ICPC, Asia Jiaozuo Regional Contest

Codeforces - Gym102028 - 2018-2019 ACM-ICPC, Asia Jiaozuo Regional Contest

alpha c++ iic img std namespace all 求和 最小

http://codeforces.com/gym/102028


A. Xu Xiake in Henan Province

看起來像水題。亂搞一下,還真是。

技術分享圖片
#include<bits/stdc++.h>
using namespace std;
#define ll long long

int main(){
    int n;
    while(~scanf("%d",&n)){
        for(int i=0;i<n;i++){
            int cnt=0;
            for(int j=0;j<4
;j++){ int t; scanf("%d",&t); if(t) cnt++; } string ans; switch(cnt){ case 0: ans="Typically Otaku"; break; case 1: ans
="Eye-opener"; break; case 2: ans="Young Traveller"; break; case 3: ans="Excellent Traveller"; break; case 4: ans="Contemporary Xu Xiake"; break
; } cout<<ans<<endl; } } }
View Code

I. Distance

看起來蠻暴力的?每次選離點多的那一側最遠的那個?(也就是輪流選)先莽一發。

差點被卡memset,還好發現得早……

居然忘記處理t組數據,都已經掃進來了!

技術分享圖片
#include<bits/stdc++.h>
using namespace std;
#define ll long long

bool c[100005];
int x[100005];

int main(){
    int t;
    while(~scanf("%d",&t)){
        while(t--){
            int n;
            scanf("%d",&n);

            memset(c,0,sizeof(c[0])*n);
            memset(x,0,sizeof(x[0])*n);

            x[0]=0;
            for(int i=0;i<n-1;i++){
                int d;
                scanf("%d",&d);
                x[i+1]=x[i]+d;
            }

            printf("%d %d",0,x[n-1]);
            c[0]=c[n-1]=1;

            int cleft=1,cright=1;

            int i=1,j=n-2;

            ll ans=x[n-1];
            ll cur=x[n-1];

            while(cleft+cright<n){
                if(cleft==cright){
                    ans+=cur;
                    if(x[i]-x[i-1]<=x[j+1]-x[j]){
                        //cur+=x[i]-x[i-1];
                        c[i]=1;
                        i++;
                        cleft++;
                    }
                    else{
                        //cur+=x[j+1]-x[j];
                        c[j]=1;
                        j--;
                        cright++;
                    }
                }
                else if(cleft<cright){
                    cur+=x[j+1]-x[i];
                    ans+=cur;

                    c[i]=1;
                    i++;
                    cleft++;
                }
                else{
                    cur+=x[j]-x[i-1];
                    ans+=cur;

                    c[j]=1;
                    j--;
                    cright++;
                }
                printf("% lld",ans);
                //printf("cur=%lld\n",cur);
            }
            printf("\n");
        }
    }
}


/*
1
8
7 6 5 4 5 6 7
*/
View Code

E. Resistors in Parallel

感覺像是選不超過n的最小的質因數連乘形成的乘積的因數。我們要求的還有某個數的所有因子求和。

這裏給出一個定理:求 $36=2*2*3*3$ 的所有因子的和,當然是等於 $(1+2+2^2)*(1+3+3^2)$ 。(拆開立刻就知道非常顯然!)

變成每一個質因子的等比數列求和再求積。由 $36=2^2*3^2$ ,得其所有因子的和等於 $(\frac{1*(1-2^3)}{1-2})*(\frac{1*(1-3^3)}{1-3})$ ,

其實就是 $\prod\frac{p^{\alpha+1}-1}{p-1}$ 。這這道題中, $\alpha=1$ ,所以就是 $\prod{(p+1)}$ ,啊!數學真好玩?!

那現在的問題是求不超過 $10^{100}$ 的質因數連乘。大數交給潘哥去做。


D. Keiichi Tsuchiya the Drift King

看起來像幾何題……不知道是不是錯覺。

Codeforces - Gym102028 - 2018-2019 ACM-ICPC, Asia Jiaozuo Regional Contest