• 今日SGU 5.1


    SGU 100

    题意:

    普通的a+b

    #include<bits/stdc++.h>
    #define de(x) cout<<#x<<"="<<x<<endl;
    #define dd(x) cout<<#x<<"="<<x<<" ";
    #define rep(i,a,b) for(int i=a;i<(b);++i)
    #define repd(i,a,b) for(int i=a;i>=(b);--i)
    #define repp(i,a,b,t) for(int i=a;i<(b);i+=t)
    #define ll long long
    #define mt(a,b) memset(a,b,sizeof(a))
    #define fi first
    #define se second
    #define inf 0x3f3f3f3f
    #define INF 0x3f3f3f3f3f3f3f3f
    #define pii pair<int,int>
    #define pdd pair<double,double>
    #define pdi pair<double,int>
    #define mp(u,v) make_pair(u,v)
    #define sz(a) (int)a.size()
    #define ull unsigned long long
    #define ll long long
    #define pb push_back
    #define PI acos(-1.0)
    #define qc std::ios::sync_with_stdio(false)
    #define db double
    #define all(a) a.begin(),a.end()
    const int mod = 1e9+7;
    const int maxn = 2e5+5;
    const double eps = 1e-6;
    using namespace std;
    bool eq(const db &a, const db &b) { return fabs(a - b) < eps; }
    bool ls(const db &a, const db &b) { return a + eps < b; }
    bool le(const db &a, const db &b) { return eq(a, b) || ls(a, b); }
    ll gcd(ll a,ll b) { return a==0?b:gcd(b%a,a); };
    ll lcm(ll a,ll b) { return a/gcd(a,b)*b; }
    ll kpow(ll a,ll b) {ll res=1;a%=mod; if(b<0) return 1; for(;b;b>>=1){if(b&1)res=res*a%mod;a=a*a%mod;}return res;}
    ll read(){
        ll x=0,f=1;char ch=getchar();
        while (ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
        while (ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
        return x*f;
    }
    //inv[1]=1;
    //for(int i=2;i<=n;i++) inv[i]=(mod-mod/i)*inv[mod%i]%mod;
    int main(){
        int a,b;
        cin>>a>>b;
        cout<<a+b<<endl;
        return 0;
    }
    View Code

    收获:无

    SGU 101

    题意:求一条欧拉通路,并记录路径

    收获:

        欧拉回路:1:  图G是连通的,不能有孤立点存在。
                  2:  对于无向图来说度数为奇数的点个数为0;对于有向图来说每个点的入度必须等于出度。
        欧拉通路:1:  图G是连通的,无孤立点存在。
              2:  对于无向图来说,度数为奇数的的点可以有2个或者0个,并且这两个奇点其中一个为起点另外一个为终点。对于有向图来说,可以存在两个点,其入度不等于出度,其中一个入度比出度大1,为路径的起点;另外一个出度比入度大1,为路径的终点。     
        欧拉回路:从一个点出发,经过图中的所以边且只经过一次,最终回到起点。
        欧拉通路:就是欧拉回路可以不回到起点
        回路就相当于通路的起点和终点是重合的
        Euler算法:(个人见解),算法本质就是dfs起点,然后回溯的时候记录边,然后倒序输出,为什么倒序呢,可以画图比较好理解,最早回溯的一定是终点的边,因为通路其实就是一笔画,那你出现回溯的话,就说明接下来已经走不通了,就是画不下去了,也就是终点,同理第二次回溯的记录边
        也就是倒二次的路
    #include<bits/stdc++.h>
    #define de(x) cout<<#x<<"="<<x<<endl;
    #define dd(x) cout<<#x<<"="<<x<<" ";
    #define rep(i,a,b) for(int i=a;i<(b);++i)
    #define repd(i,a,b) for(int i=a;i>=(b);--i)
    #define repp(i,a,b,t) for(int i=a;i<(b);i+=t)
    #define ll long long
    #define mt(a,b) memset(a,b,sizeof(a))
    #define fi first
    #define se second
    #define inf 0x3f3f3f3f
    #define INF 0x3f3f3f3f3f3f3f3f
    #define pii pair<int,int>
    #define pdd pair<double,double>
    #define pdi pair<double,int>
    #define mp(u,v) make_pair(u,v)
    #define sz(a) (int)a.size()
    #define ull unsigned long long
    #define ll long long
    #define pb push_back
    #define PI acos(-1.0)
    #define qc std::ios::sync_with_stdio(false)
    #define db double
    #define all(a) a.begin(),a.end()
    const int mod = 1e9+7;
    const int maxn = 1e2+5;
    const double eps = 1e-6;
    using namespace std;
    bool eq(const db &a, const db &b) { return fabs(a - b) < eps; }
    bool ls(const db &a, const db &b) { return a + eps < b; }
    bool le(const db &a, const db &b) { return eq(a, b) || ls(a, b); }
    ll gcd(ll a,ll b) { return a==0?b:gcd(b%a,a); };
    ll lcm(ll a,ll b) { return a/gcd(a,b)*b; }
    ll kpow(ll a,ll b) {ll res=1;a%=mod; if(b<0) return 1; for(;b;b>>=1){if(b&1)res=res*a%mod;a=a*a%mod;}return res;}
    ll read(){
        ll x=0,f=1;char ch=getchar();
        while (ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
        while (ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
        return x*f;
    }
    //inv[1]=1;
    //for(int i=2;i<=n;i++) inv[i]=(mod-mod/i)*inv[mod%i]%mod;
    int n,tot;
    struct edge{
        int v,nt,id;
    }e[maxn<<1];
    bool vis[maxn<<1];
    int pre[8],in[8];
    void init(){ tot=0;mt(pre,-1);mt(in,0);mt(vis,false); }
    void add(int u,int v,int id){
        e[tot].v=v;e[tot].nt=pre[u];e[tot].id=id;pre[u]=tot++;
        e[tot].v=u;e[tot].nt=pre[v];e[tot].id=id;pre[v]=tot++;
    }
    vector<int> ans;
    void Euler(int u){
        for(int i=pre[u];~i;i=e[i].nt){
            int v=e[i].v;
            if(!vis[i]){
                vis[i]=vis[i^1]=true;
                Euler(v);
                ans.pb(i);
            }
        }
    }
    int main(){
        init();
        scanf("%d",&n);
        int odd = 0,st;
        int u,v;
        rep(i,1,n+1) { scanf("%d%d",&u,&v);add(u,v,i);in[u]++;in[v]++;st = u; }
        rep(i,0,7) if(in[i]&1) odd++,st=i;
        if(!odd||odd==2) {
            Euler(st);
            if(sz(ans)!=n) printf("No solution
    ");
            else repd(i,sz(ans)-1,0) printf("%d %c
    ",e[ans[i]].id,(ans[i]&1)?'-':'+');
        }
        else printf("No solution
    ");
        return 0;
    }
    View Code

     SGU 102

    题意:求小于N的并且和N互质的数字的数量

    收获:

    就是求phi函数:

    #include<bits/stdc++.h>
    #define de(x) cout<<#x<<"="<<x<<endl;
    #define dd(x) cout<<#x<<"="<<x<<" ";
    #define rep(i,a,b) for(int i=a;i<(b);++i)
    #define repd(i,a,b) for(int i=a;i>=(b);--i)
    #define repp(i,a,b,t) for(int i=a;i<(b);i+=t)
    #define ll long long
    #define mt(a,b) memset(a,b,sizeof(a))
    #define fi first
    #define se second
    #define inf 0x3f3f3f3f
    #define INF 0x3f3f3f3f3f3f3f3f
    #define pii pair<int,int>
    #define pdd pair<double,double>
    #define pdi pair<double,int>
    #define mp(u,v) make_pair(u,v)
    #define sz(a) (int)a.size()
    #define ull unsigned long long
    #define ll long long
    #define pb push_back
    #define PI acos(-1.0)
    #define qc std::ios::sync_with_stdio(false)
    #define db double
    #define all(a) a.begin(),a.end()
    const int mod = 1e9+7;
    const int maxn = 1e2+5;
    const double eps = 1e-6;
    using namespace std;
    bool eq(const db &a, const db &b) { return fabs(a - b) < eps; }
    bool ls(const db &a, const db &b) { return a + eps < b; }
    bool le(const db &a, const db &b) { return eq(a, b) || ls(a, b); }
    ll gcd(ll a,ll b) { return a==0?b:gcd(b%a,a); };
    ll lcm(ll a,ll b) { return a/gcd(a,b)*b; }
    ll kpow(ll a,ll b) {ll res=1;a%=mod; if(b<0) return 1; for(;b;b>>=1){if(b&1)res=res*a%mod;a=a*a%mod;}return res;}
    ll read(){
        ll x=0,f=1;char ch=getchar();
        while (ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
        while (ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
        return x*f;
    }
    //inv[1]=1;
    //for(int i=2;i<=n;i++) inv[i]=(mod-mod/i)*inv[mod%i]%mod;
    int euler_phi(int n){
        int res = n;
        int m = (int)sqrt(n);
        rep(i,2,m+1) if(n % i == 0){
            res = res / i * (i-1);
            while(n % i == 0) n /= i;
        }
        if(n > 1) res = res / n * (n-1);
        return res;
    }
    //下面是预处理phi函数的板子
    //void euler_phi()
    //{
    //    for(int i = 1; i < N; i++) phi[i] = i;
    //    for(int i = 2; i < N; i++)
    //        if(phi[i] == i) //成立说明i是素数
    //            for(int j = i; j < N; j += i) //j要从i开始,这样可以处理素数的情况
    //                phi[j] = phi[j] / i * (i-1);
    //}
    //下面是关于欧拉函数的一些简单性质
    //任意一个大于1的正整数,都可以写成一系列质数的积,即n=(p1^k1)*(p2^k2)*...*(pr^kr)
    //1. 当p为素数时,phi(p^k)=p^k-p^(k-1)=(p^k)*(1-1/p) (k>=1)
    //2. phi(1) = 1
    //3. 如果n=p*q且gcd(p,q)==1,则phi(n)=phi(p)*phi(q)
    //4. 因为n=(p1^k1)*(p2^k2)*...*(pr^kr),所以phi(n)=phi(p1^k1)*...*phi(pr^kr)
    int main(){
        int n;
        scanf("%d",&n);
        printf("%d
    ",euler_phi(n));
    }
    View Code
  • 相关阅读:
    使用vue3.0仿Mac系统的提醒事项做的一个TODO功能
    一些容易忽略的css选择器
    根据node节点生成VNode以及解析成node节点
    jQuery-day02
    jQuery-day01
    初探WebSocket
    Python-如何对字典集合进行排序
    sqlserver获取代理服务作业job的执行情况
    excel中多表汇总
    [javascript][转载]jQuery获取Select选择的Text和 Value
  • 原文地址:https://www.cnblogs.com/chinacwj/p/8977318.html
Copyright © 2020-2023  润新知