其他分享
首页 > 其他分享> > 2015-2016 ACM-ICPC, NEERC, Northern Subregional Contest (7/12)

2015-2016 ACM-ICPC, NEERC, Northern Subregional Contest (7/12)

作者:互联网

\[2015-2016\ ACM-ICPC,\ NEERC,\ Northern\ Subregional\ Contest\]

\(A.Alex\ Origami\ Squares\)

签到

//#pragma comment(linker, "/STACK:1024000000,1024000000")
#include<bits/stdc++.h>
using namespace std;
int main(){
    int a,b;
    freopen("alex.in","r",stdin);
    cin >> a >> b;
    freopen("alex.out","w",stdout);
    double res = max(max(min(a/3.0,b/1.0),min(a/1.0,b/3.0)),min(a/2.0,b/2.0));
    cout << res << endl;
    return 0;
}

\(B.Black\ and\ White\)

构造,把多的框在少的里面即可

//#pragma comment(linker, "/STACK:1024000000,1024000000")
#include<bits/stdc++.h>
using namespace std;
function<void(void)> ____ = [](){ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);};
const int MAXN = 1e5+7;
int n,m,len;
char tile[MAXN][5];
int main(){
    #ifdef ONLINE_JUDGE
    freopen("black.in","r",stdin);
    #endif
    ____();
    cin >> n >> m;
    #ifdef ONLINE_JUDGE
    freopen("black.out","w",stdout);
    #endif
    if(m==0){
        cout << 1 << ' ' << 1 << endl << '@' << endl;
        return 0; 
    }
    if(n==0){
        cout << 1 << ' ' << 1 << endl << '.' << endl;
        return 0;
    }
    char x='@',y='.';
    if(n<m){
        swap(n,m);
        swap(x,y);
    }
    len = 1;
    if(n>m){
        tile[len][1] = tile[len][2] = tile[len][3] = y;
        len++, m--;
    }
    while(n>m){
        tile[len][2] = x;
        tile[len][1] = tile[len][3] = y;
        len++, n--;
        tile[len][1] = tile[len][2] = tile[len][3] = y;
        len++;
    }
    while(n){
        tile[len][1] = tile[len][2] = tile[len][3] = x;
        len++, n--;
        tile[len][1] = tile[len][2] = tile[len][3] = y;
        len++;
    }
    if(tile[len][1]=='\0') len--;
    cout << len << ' ' << 3 << endl;
    for(int i = 1; i <= len; i++) cout << (tile[i]+1) << endl;
    return 0;
}

\(C.Concatenation\)

答案就是总数量-右串从\(1\)到\(lenr-1\)各个字符在左串\(2~lenl\)之间出现的次数

//#pragma comment(linker, "/STACK:1024000000,1024000000")
#include<bits/stdc++.h>
using namespace std;
function<void(void)> ____ = [](){ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);};
const int MAXN = 3e5+7;
char s[MAXN],t[MAXN];
int len1,len2;
int main(){
    #ifdef ONLINE_JUDGE
    freopen("concatenation.in","r",stdin);
    #endif
    scanf("%s %s",s+1,t+1);
    #ifdef ONLINE_JUDGE
    freopen("concatenation.out","w",stdout);
    #endif
    len1 = strlen(s+1);
    len2 = strlen(t+1);
    int_fast64_t res = len1*(int_fast64_t)len2;
    map<char,int> mp;
    for(int i = 2; i <= len1; i++) mp[s[i]]++;
    for(int i = 1; i < len2; i++) res -= mp[t[i]];
    cout << res << endl;
    return 0;
}

\(D.Distribution\ in\ Metagonia\)

考虑构造时先把质因子\(2\),\(3\)提出来,然后得到一个奇数,把奇数拆分为\(3^k·p\),继续对\(p\)拆分直到\(p\)的因子只含\(2\)和\(3\)为止
递归构造即可

//#pragma comment(linker, "/STACK:1024000000,1024000000")
#include<bits/stdc++.h>
using namespace std;
function<void(void)> ____ = [](){ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);};
using LL = int_fast64_t;
int t;
LL n[1111];
void gao(LL m, LL mul, vector<LL> &vec){
    if(m==1){
        vec.emplace_back(mul);
        return;
    }
    if(m%3!=0&&m%2!=0){
        LL tp = 1;
        while(tp*3<=m) tp *= 3;
        gao(tp,mul,vec);
        gao(m-tp,mul,vec);
        return;
    }
    LL sum = 1;
    while(m%2==0){
        sum *= 2;
        m >>= 1;
    }
    while(m%3==0){
        sum *= 3;
        m /= 3;
    }
    gao(m,sum*mul,vec);
}
void solve(LL m){
    vector<LL> vec;
    gao(m,1,vec);
    cout << vec.size() << endl;
    for(LL x : vec) cout << x << ' '; cout << endl;
}
int main(){
    #ifdef ONLINE_JUDGE
    freopen("distribution.in","r",stdin);
    freopen("distribution.out","w",stdout);
    #endif
    ____();
    cin >> t;
    for(int i = 1; i <= t; i++) cin >> n[i];
    for(int i = 1; i <= t; i++) solve(n[i]);    
    return 0;
}

\(E.Easy\ Arithmetic\)

打记号标记前导零、上一位是否是符号、当前正负值然后判断即可

//#pragma comment(linker, "/STACK:1024000000,1024000000")
#include<bits/stdc++.h>
using namespace std;
function<void(void)> ____ = [](){ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);};
const int MAXN = 3333;
char s[MAXN],tar[MAXN];
int main(){
    #ifdef ONLINE_JUDGE
    freopen("easy.in","r",stdin);
    #endif
    ____();
    cin >> (s+1);
    int len = strlen(s+1);
    #ifdef ONLINE_JUDGE
    freopen("easy.out","w",stdout);
    #endif
    int c = 1, ptr = 1;
    bool tag = true, lead = true, op = true;
    while(ptr<=len){
        if(!isdigit(s[ptr])){
            if(s[ptr]=='-') tag = false;
            else if(s[ptr]=='+') tag = true;
            tar[c++] = s[ptr];
            op = true;
        }
        else{
            if(op){
                op = false;
                tar[c++] = s[ptr];
                lead = (s[ptr]=='0');
            }
            else{
                if(!tag){
                    tar[c++] = '+';
                    tag = true;
                    tar[c++] = s[ptr];
                    lead = (s[ptr]=='0');
                }
                else{
                    if(lead){
                        tar[c++] = '+';
                        lead = (s[ptr]=='0');
                        tar[c++] = s[ptr];
                    }
                    else tar[c++] = s[ptr];
                }
            }
        }
        ptr++;
    }
    cout << (tar+1) << endl;
    return 0;
}

\(F.Fygon\)

\(G.Graph\)

\(H.Hash\ Code\ Hacker\)

每次从后一位向前进一位,后一位\(y\)变成\(Z\),前一位的\(x\)变成\(y\),重复操作即可

//#pragma comment(linker, "/STACK:1024000000,1024000000")
#include<bits/stdc++.h>
using namespace std;
function<void(void)> ____ = [](){ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);};
const int MAXN = 1111;
char s[MAXN];
int k;
int main(){
    #ifdef ONLINE_JUDGE
    freopen("hash.in","r",stdin);
    #endif
    cin >> k;
    #ifdef ONLINE_JUDGE
    freopen("hash.out","w",stdout);
    #endif
    for(int i = 1; i <= 999; i++) s[i] = 'x';
    s[1000] = 'y';
    cout << (s+1) << endl;
    for(int i = 1; i < k; i++){
        s[1000+1-i] = 'Z';
        s[1000-i] = 'y';
        cout << (s+1) << endl;
    }
    return 0;
}

\(I.Insider's\ Information\)

\(J.Journey\ to\ the\ "The World's Start"\)

\(K.Kingdom\ Trip\)

\(L.Lucky\ Chances\)

签到,暴力

//#pragma comment(linker, "/STACK:1024000000,1024000000")
#include<bits/stdc++.h>
using namespace std;
function<void(void)> ____ = [](){ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);};
const int MAXN = 111;
const int dir[4][2] = {{1,0},{-1,0},{0,1},{0,-1}};
int n,m,A[MAXN][MAXN];
int main(){
    #ifdef ONLINE_JUDGE
    freopen("lucky.in","r",stdin);
    #endif
    ____();
    cin >> n >> m;
    for(int i = 1; i <= n; i++) for(int j = 1; j <= m; j++) cin >> A[i][j];
    #ifdef ONLINE_JUDGE
    freopen("lucky.out","w",stdout);
    #endif
    int res = 0;
    for(int i = 1; i <= n; i++) for(int j = 1; j <= m; j++){
        for(int d = 0; d < 4; d++){
            bool ok = true;
            for(int x = i+dir[d][0], y = j + dir[d][1]; x>0&&x<=n&&y>0&&y<=m; x+=dir[d][0],y+=dir[d][1]) if(A[x][y]>=A[i][j]) ok = false;
            res+=ok;
        }
    }
    cout << res << endl;
    return 0;
}

标签:12,Northern,Contest,int,len,MAXN,freopen,1024000000,tile
来源: https://www.cnblogs.com/kikokiko/p/12243876.html