zoukankan      html  css  js  c++  java
  • HZNU Training 1 for Zhejiang Provincial Competition 2020

    A - People Counting

     ZOJ - 3944

    就是给你一张图,让你判断有多少个人,

    算是个观察题吧,因为,一个人身上所有的点除了 .   以外,其他部件只有一个。

    从上往下,找到一个特殊部件就把他变成 .  ;然后把匹配的是一个人的部件变成  . ;

    问题解决;

    也可以怎么想:就是人的形状就是个3*3的矩形框里,将这个矩形框从左往右,从上到下,在矩阵里进行比对,如果有对应相同的部分,那么这里就有一个人。
    直接从左上角遍历到右下角就可以。但你要将矩阵扩充出来,这样避免了判越界;

    正解确实是个好办法,因为位置一旦变了,肯定就不是原来那个形状了。

    #include<bits/stdc++.h>
    using namespace std;
    #define rep(i,j,k) for(int i=(int)j;i<=(int)k;i++)
    #define per(i,j,k) for(int i=(int)k;i>=(int)j;i--)
    #define pb push_back
    #define pf push_front
    #define fi first
    #define se second 11
    typedef long long ll;
    typedef unsigned long long ull;
    typedef long double ldb;
    typedef double db;
    const db PI=acos(-1.0);
    const ll INF=0x3f3f3f3f3f3f3f3fLL;
    const int inf=0x3f3f3f3f;//0x7fffffff;
    const double eps=1e-9;
    const ll MOD=1e9+9;
    const int maxn=1e9+5;
    char mp[200][200];
    bool check(int i,int j){
     if (mp[i][j + 1] == 'O' || mp[i + 1][j] == '/' || mp[i + 1][j + 1] == '|' || 
            mp[i + 1][j + 2] == '\' || 
            mp[i + 2][j] == '(' || mp[i + 2][j + 2] == ')')
            return 1;
        else return 0;
    }
    int main(){
        int n,m,t;
        cin>>t;
        while(t--){
        // memset(mp,-1,sizeof mp);
        scanf("%d %d",&n,&m);
        for(int i=2;i<=n+1;i++){
         getchar();
        for(int j=2;j<=m+1;j++){
        scanf("%c",&mp[i][j]);
        }
        
        }
        int ans=0;    
        for(int i=0;i<=n+1;i++){
        for(int j=0;j<=m+1;j++){
        if(check(i,j))ans++;
        }
        }
        printf("%d
    ",ans);
        
        }
        system("pause");
        return 0;
    }
    View Code

    D - Almost Equal

     CodeForces - 1205A 

    题意:就是说给你一个n,我们需要构造一个长度为2n 的环,数字分别为1 ~ 2n,使环上每n个连续的点的记录下来。其中这些数要求只有2个数字构成,并且这两个数必须连续。没有为NO, 有的则输出YES 和方案。

    解法:

    每个点会在n个环上,所以所有环的总和为sum = (1 + 2 + … + 2 * n) * n.
    一共有2n个环所以两个不同和的环的和(有点绕)为rsum = sum / n, 即为rsum = (1 + 2 + … 2 * n).
    所以rsum 是偶数时,则无法分为两个连续的自然数。无解。
    取法:看样例;1往下取,n+1往上取,一个轮回倒着一下;

    感觉这种题看少了;

    #include<bits/stdc++.h>
    using namespace std;
    #define rep(i,j,k) for(int i=(int)j;i<=(int)k;i++)
    #define per(i,j,k) for(int i=(int)k;i>=(int)j;i--)
    #define pb push_back
    #define pf push_front
    #define fi first
    #define se second 11
    typedef long long ll;
    typedef unsigned long long ull;
    typedef long double ldb;
    typedef double db;
    const db PI=acos(-1.0);
    const ll INF=0x3f3f3f3f3f3f3f3fLL;
    const int inf=0x3f3f3f3f;//0x7fffffff;
    const double eps=1e-9;
    const ll MOD=9999991;
    const int maxn=1e5+5;
    ll sum[maxn],f[maxn];
    int a[maxn];
    int main(){
        int n;
        cin>>n;
        ll rsum=(2*n+1)*n;
        if(rsum%2==0){
        printf("NO
    ");
        return 0;
        }
        printf("YES
    ");
        a[1]=1;
        a[n+1]=2;
        int q=2,h=n+2;
        int now=2;
        for(int i=1;i<n;i++){
        if(i%2){
        a[h++]=++now;
        a[q++]=++now;
        }
        else {
        a[q++]=++now;
        a[h++]=++now;
        }
        }
        for(int i=1;i<=2*n;i++){
        printf("%d%c",a[i],i==2*n?'
    ':' ');
        }
        return 0;
    }
    View Code

    E - Citations

     Gym - 101853K 

    这题给我吓得不轻,字符串大模拟;

    K - Simple Skewness

     CodeForces - 626E 

    题意:给你一段序列,要你求子集,使得平均数-中位数最小。

    枚举中位数,三分区间,学了再补充;

    想的太多,做的太少;
  • 相关阅读:
    Python解释器相关知识
    简单了解下Flask
    Scoket编程
    __file__的作用
    jquery编写可折叠列表
    浑浑噩噩的一天
    js实现杨辉三角
    js闭包
    python读取word表格
    HTMLTestRunner报告
  • 原文地址:https://www.cnblogs.com/littlerita/p/12392869.html
Copyright © 2011-2022 走看看