UESTC 2016 Summer Training #4 Div.2(未完待续)

A

include <bits/stdc++.h>

#define INF 0x3f3f3f3f
#define eps 1e-6
typedef long long LL;
const double pi = acos(-1.0);
const long long mod = 1e9 + 7;
using namespace std;

int a[105][105];

int main()
{
    int M,N;
    cin >> N >> M;
    for(int i = 1;i <= N;i++)
        for(int j = 1;j <= M;j++)
            cin >> a[i][j];
    int ANS = INF;
    int mina = 0,minb = 0;
    for(int i = 1;i <= N;i++)
        for(int j = 1;j <= M;j++)
        {
            if(i == j)
                continue;
            int A = 0,B = 0,C = 0,D = 0;
            for(int k = 1;k <= N;k++)
            {
                if(a[k][i] == 1 && a[k][j] == 1)
                    A++;
                else if(a[k][i] == 1)
                    B++;
                else if(a[k][j] == 1)
                    C++;
                else
                    D++;
            }
            int ans = 0;
            ans = max(ans,A);
            ans = max(ans,B);
            ans = max(ans,C);
            ans = max(ans,D);
            if(ans < ANS)
            {
                ANS = ans;
                mina = i;
                minb = j;
            }
        }
    printf("%d\n",ANS);
    printf("%d %d\n",mina,minb);

    return 0;
}

B

#include <bits/stdc++.h>

#define INF 0x3f3f3f3f
#define eps 1e-6
typedef long long LL;
const double pi = acos(-1.0);
const long long mod = 25 * 1E8;
using namespace std;

int fun(int i)
{
    int j = 2;
    while(i >= j)
    {
        i -= (i / j);
        j++;
    }
    return i;
}

int main()
{
    int l,r;
    cin >> l >> r;
    int ans = fun(r) - fun(l - 1);
    //printf("%d %d\n",fun(r),fun(l - 1));
    printf("%d\n",ans);
    return 0;
}

C

#include<cstdio>
#define N 200005
int n,m,ux,uy,ax,ay,a[N],u[N],ck,ans,fx[4]= {1,-1,0,0},fy[4]= {0,0,1,-1};
char c;
void dfs(int x,int y,int s){
    if(x==ux&&y==uy&&s>2||x==ax&&y==ay)//走回起点(s是第几步)或走到终点
        ans++;
    if(u[x*m-m+y]||ans>2||ans&&ck)return;
    u[x*m-m+y]=1;
    int r=0;
    for(int i=0;i<4;i++){
        int nx=x+fx[i];
        int ny=y+fy[i];
        if(nx&&nx<=n&&ny&&ny<=m&&a[nx*m-m+ny]){
            r++;//点的度
            if(r>2)ck=1;
            dfs(nx,ny,s+1);
        }
    }
}
int main(){
    scanf("%d%d ",&n,&m);
    for(int i=1; i<=n; i++)
    {
        for(int j=1; j<=m; j++)
        {
            c=getchar();
            if(c!='#')
                a[i*m-m+j]=1;
            if(c=='1')
            {
                ux=i;
                uy=j;
            }
            else if(c=='2')
            {
                ax=i;
                ay=j;
            }
        }
        getchar();
    }
    dfs(ux,uy,0);
    if(ans>2||ans&&ck)printf("YES");
    else printf("NO");
    return 0;
}

D

#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>

using namespace std;

const int maxn = 1e5 * 2 + 10;

char buf[maxn];

int cha[26];

int ql[maxn], qr[maxn];

void init(int len, int k)
{
    memset(qr, -1, sizeof qr);
    int l = len, ct = 0;
    for (int i = len ; i > 0 ; i--)
    {
        while(ct < k && l > 0)
        {
            if (!cha[buf[l] - 'a'])
                ct++;
            cha[buf[l] - 'a']++;
            --l;
        }
        if (ct == k)
            qr[i] = l + 1;
        if (--cha[buf[i] - 'a'] == 0)
            --ct;
    }
    memset(cha, 0, sizeof cha);

    memset(ql, -1, sizeof ql);
    l = len, ct = 0;
    for (int i = len ; i > 0 ; i--)
    {
        while(ct <= k && l > 0)
        {
            if (!cha[buf[l] - 'a'])
                ct++;
            cha[buf[l] - 'a']++;
            --l;
        }
        if (ct == k + 1)
            ql[i] = l + 2;
        else if (ct == k && l == 0)
            ql[i] = l + 1;
        if (--cha[buf[i] - 'a'] == 0)
            --ct;
    }
}

struct tree
{
    int num;
    int m;
}t[maxn * 4];

void build(int l, int r, int p)
{
    t[p].num = maxn;
    if (l == r)
        return;
    t[p].m = (l + r) / 2;
    build(l, t[p].m, 2 * p);
    build(t[p].m + 1, r, 2 * p + 1);
}

int query(int l, int r, int ll, int rr, int p)
{
    if (l == ll && r == rr)
        return t[p].num;
    if (ll > t[p].m)
        return query(t[p].m + 1, r, ll, rr, 2 * p + 1);
    else if (rr <= t[p].m)
        return query(l, t[p].m, ll, rr, 2 * p);
    return min(
        query(l, t[p].m, ll, t[p].m, 2 * p),
        query(t[p].m + 1, r, t[p].m + 1, rr, 2 * p + 1));
}

void modify(int l, int r, int p, int pp, int num)
{
    if (l == r)
    {
        t[p].num = num;
        return;
    }
    if (pp <= t[p].m)
        modify(l, t[p].m, 2 * p , pp, num);
    else
        modify(t[p].m + 1, r, 2*p + 1, pp, num);
    t[p].num = min(t[p].num, num);
}

int main()
{
    int k, len;
    scanf("%d%s", &k, buf + 1);
    len = strlen(buf + 1);
    init(len, k);
    build(0, len, 1);
    for (int i = 1 ; i <= len ; i++)
    {
        int ans = -1;
        if (ql[i] == 1)
            modify(0, len, 1, i, ans = 1);
        else if (ql[i] != -1)
        {
            ans = query(0, len, ql[i] - 1, qr[i] - 1, 1);
            //printf("%d\n", ans);
            if (ans != maxn)
                modify(0, len, 1, i, ++ans);
            else
                ans = -1;
        }
        printf("%d ", ans);
    }
    return 0;
}

G

#include <bits/stdc++.h>

#define INF 0x3f3f3f3f
#define eps 1e-6
typedef long long LL;
const double pi = acos(-1.0);
const long long mod = 25 * 1E8;
using namespace std;

int main()
{
    double x1,y1,x2,y2;
    double a1,b1,a2,b2;
    scanf("%lf %lf %lf %lf",&x1,&y1,&x2,&y2);
    scanf("%lf %lf %lf %lf",&a1,&b1,&a2,&b2);
    double a = (a1 - a2) * (a1 - a2) + (b1 - b2) * (b1 - b2);
    double b = (b2 - b1) * (y2 - y1) + (a2 - a1) * (x2 - x1);
    b *= 2;
    double c = (x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1);
    double ans = (4 * a * c - b * b) / (4 * a);
    if(b * a < 0)
        printf("%.15f\n",sqrt(ans));
    else
        printf("%.15f\n",sqrt(c));
    return 0;
}

H

#include <bits/stdc++.h>  
using namespace std;  
const int N=1e5+10;  
int a[2*N], b[2*N], t[2*N], r[2*N];  
int main()  
{  
    int n, m;  
    scanf("%d%d", &n, &m);  
    for(int i=1; i<=n; i++)   
    {  
        scanf("%d", &a[i]);  
        b[i] = a[i];  
    }  
    int ti, ri, len=0;  
    for(int i=0; i<m; i++)  
    {  
        scanf("%d%d", &ti, &ri);  
        while(len && ri>=r[len-1]) len--;  
        t[len]=ti, r[len]=ri, len++;  
    }  
    r[len++]=0;  
    sort(b+1, b+1+r[0]);  
    int lb=1, rb=r[0];  
    for(int i=1; i<len; i++)  
    {  
        for(int j=r[i-1]; j>r[i]; j--)  
        {  
            if(t[i-1]==1) a[j]=b[rb--];  
            else a[j]=b[lb++];  
        }   
    }  
    printf("%d", a[1]);  
    for(int i=2; i<=n; i++)  
    {  
        printf(" %d", a[i]);  
    }  
    printf("\n");  
    return 0;  
}  

I

#include <bits/stdc++.h>

#define INF 0x3f3f3f3f
#define eps 1e-6
typedef long long LL;
const double pi = acos(-1.0);
const long long mod = 1e9 + 7;
using namespace std;

struct point  
{  
    int id,x,y;  
    bool operator <(point a)const  
    {  
        return y < a.y;  
    }  
};  

vector <point> bx[1010];  

int main()  
{  
    int n;  
    scanf("%d",&n);  
    for(int i=1;i<=n;i++)  
    {  
        point t;  
        scanf("%d%d",&t.x,&t.y);  
        t.id=i;  
        bx[t.x/1000].push_back(t);  
    }  
    bool flag=0;  
    for(int i=0;i<=1000;i++)  
    {  
        sort(bx[i].begin(),bx[i].end());  
        if(bx[i].size())  
        {  
            int len=bx[i].size();  
            if(!flag)  
                for(int j=0;j<len;j++)  
                    printf("%d ",bx[i][j].id);  
            else  
                for(int j=len-1;j>-1;j--)  
                    printf("%d ",bx[i][j].id);  
            flag^=1;  
        }  
    }  
}  

J

#include<bits/stdc++.h>

using namespace std;

typedef pair<int,int>   II;
typedef vector< II >      VII;
typedef vector<int>     VI;
typedef vector< VI >    VVI;
typedef long long int   LL;

#define PB push_back
#define MP make_pair
#define F first
#define S second
#define SZ(a) (int)(a.size())
#define ALL(a) a.begin(),a.end()
#define SET(a,b) memset(a,b,sizeof(a))

#define si(n) scanf("%d",&n)
#define dout(n) printf("%d\n",n)
#define sll(n) scanf("%lld",&n)
#define lldout(n) printf("%lld\n",n)
#define fast_io ios_base::sync_with_stdio(false);cin.tie(NULL)

#define TRACE

#ifdef TRACE
#define trace(...) __f(#__VA_ARGS__, __VA_ARGS__)
template <typename Arg1>
void __f(const char* name, Arg1&& arg1){
    cerr << name << " : " << arg1 << std::endl;
}
template <typename Arg1, typename... Args>
void __f(const char* names, Arg1&& arg1, Args&&... args){
    const char* comma = strchr(names + 1, ',');cerr.write(names, comma - names) << " : " << arg1<<" | ";__f(comma+1, args...);
}
#else
#define trace(...)
#endif

//FILE *fin = freopen("in","r",stdin);
//FILE *fout = freopen("out","w",stdout);


const int N=2000005;
const int M=100000000;
const int K=30;
const LL MOD=1000000007;

VI prim[N];
int vis[N];
LL fact[K],invfact[K];

LL powmod(LL a,LL b)
{
    if(b==0)
        return 1;
    LL ret=powmod(a,b/2);
    ret=(ret*ret)%MOD;
    if(b%2==1)
    {
        ret=(ret*a)%MOD;
    }
    return ret;
}

LL ncr(int n,int r)
{
    LL ret=1;
    if(n>=(int)MOD)
        return 0;
    for(int i=0;i<r;i++)
    {
        ret=(ret*1LL*(n-i))%MOD;
    }
    ret=(ret*invfact[r])%MOD;
    return ret;
}

void pre()
{
    for(int i=2;i<N;i++)
        if(!vis[i])
            for(int j=i;j<N;j+=i)
            {
                vis[j]=1;
                prim[j].PB(i);
            }

    fact[0]=1ll;
    invfact[0]=1;

    for(int i=1;i<K;i++)
    {
        fact[i]=(fact[i-1]*1LL*i)%MOD;
        invfact[i]=powmod(fact[i],MOD-2);
    }
    return;
}


int main()
{
    fast_io;
    pre();
    int t;
    cin>>t;
    while(t--)
    {
        int n,m,z;
        cin>>n>>z;
        m=n;
        LL ans=1;
        for(int i=0;i<SZ(prim[n]);i++)
        {
            int p=prim[n][i];
            int ct=0;
            while(m%p==0)
            {
                ct++;
                m=m/p;
            }
            ans=(ans*ncr(ct+z-1,ct))%MOD;
        }
        cout<<ans<<"\n";
    }
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值