2017 7.22 模拟赛

最水的一次模拟赛。。

点击查看题目

T1

求最后K位 

那前面的数是没有比要求的 ,

我们就把 10k 作为模数 ,对答案进行取模 就好了 

#include <ctype.h>
#include <cstdio>
#define N 100005

typedef long long LL;
void read(LL &x)
{
    x=0;bool f=0;
    register char ch=getchar();
    for(;!isdigit(ch);ch=getchar()) if(ch==‘-‘) f=1;
    for(;isdigit(ch);ch=getchar()) x=x*10+ch-‘0‘;
    x=f?(~x)+1:x;
}
LL Ans,x,a[N],b[N],n,k,m=1;
int ans[11];
LL qpow(LL a,LL b)
{
    LL base=a,r=1%m;
    for(;b;b>>=1)
    {
        if(b&1)
            r=(r*base)%m;
        base=base*base%m;
    }
    return r%m;
}
int main()
{
    freopen("digits.in","r",stdin);
    freopen("digits.out","w",stdout);
    read(n);
    read(k);
    for(int i=1;i<=k;i++) m*=10;
    for(int i=1;i<=n;i++) read(a[i]),read(b[i]);
    read(x);
    for(int i=1;i<=n;i++) Ans=(Ans+(qpow(x,b[i])*a[i]%m))%m;
    for(int i=k;i>=1&&Ans;Ans=Ans/10,i--) ans[i]=Ans%10;
    for(int i=1;i<=k;i++) printf("%d\n",ans[i]);
    return 0;
}

T2 

求满足条件的x值 

移项之后用三重循环把左边能取到的值计数,

这里会取到负数 于是本弱鸡使用了map。

最后三重循环求右边的取值 ,

累加结果 

#include <ctype.h>
#include <cstdio>
#include <map>

typedef long long LL;
using namespace std;
map<LL,int>Q;
void read(LL &x)
{
    x=0;
    bool f=0;
    register char ch=getchar();
    for(;!isdigit(ch);ch=getchar()) if(ch==‘-‘) f=1;
    for(;isdigit(ch);ch=getchar()) x=x*10+ch-‘0‘;
    x=f?(~x)+1:x;
}
LL ans,k,A[7];
int main()
{
    freopen("equation.in","r",stdin);
    freopen("equation.out","w",stdout);
    read(k);
    for(int i=1;i<=6;i++)
    {
        read(A[i]);
        if(i%2==0) A[i]=(~A[i])+1;
    }
    for(int i=4;i<=6;i++) A[i]=(~A[i])+1;
    for(int a=1;a<=k;a++)
     for(int b=1;b<=k;b++)
      for(int c=1;c<=k;c++)
       {
             LL d=a*A[1]+b*A[2]+c*A[3];
             Q[d]++;
       }
    for(int o=1;o<=k;o++)
     for(int p=1;p<=k;p++)
      for(int q=1;q<=k;q++)
      {
         LL r=o*A[4]+p*A[5]+q*A[6];
           ans=ans+Q[r];
      }
    printf("%d",ans);
    return 0;
}

T3

k>=n 所以每天一条边

走的路程最大的一天中走的路尽可能少

所以就建一棵最小生成树 ,同班大佬都看出了最小编瓶颈生成树,本弱鸡没有。。

然后我就只能弱弱的跑了LCA 。。

但还是过了 。

#include <algorithm>
#include <ctype.h>
#include <cstdio>
#define N 85005
using namespace std;
struct E
{
    int x,y,z;
    bool operator<(E a)const
    {
        return z<a.z;
    }
}e[N];
struct Edge
{
    int next,v,dist;
    Edge (int next=0,int v=0,int dist=0) : next (next), v (v), dist (dist) {}
}edge[N<<1];
int dep[N],dad[N][30],f[N][25],fa[N],head[N],cnt,n,m,k;
void read(int &x)
{
    x=0;bool f=0;
    register char ch=getchar();
    for(;!isdigit(ch);ch=getchar()) if(ch==‘-‘) f=1;
    for(;isdigit(ch);ch=getchar()) x=x*10+ch-‘0‘;
    x=f?(~x)+1:x;
}
int find_(int x)
{
    return x==fa[x]?x:fa[x]=find_(fa[x]);
}
void insert(int u,int v,int l)
{
    edge[++cnt]=Edge(head[u],v,l);
    head[u]=cnt;
}
class lcA
{
    public:
        void dfs(int x)
        {
            dep[x]=dep[dad[x][0]]+1;
            for(int i=0;dad[x][i];i++)
            {
                dad[x][i+1]=dad[dad[x][i]][i];
                f[x][i+1]=max(f[dad[x][i]][i],f[x][i]);
            }
            for(int u=head[x];u;u=edge[u].next)
            {
                int v=edge[u].v;
                if(dad[x][0]!=v)
                {
                    dad[v][0]=x;
                    f[v][0]=edge[u].dist;
                    dfs(v);
                }
            }
        }
        int lca(int x,int y)
        {
            int ans=0;
            if(dep[x]<dep[y]) swap(x,y);
            for(int i=25;i>=0;i--)
            {
                if(dep[dad[x][i]]>=dep[y])
                {
                    ans=max(ans,f[x][i]);
                    x=dad[x][i];
                }
            }
            if(x==y) return ans;
            for(int i=25;i>=0;i--)
            {
                if(dad[y][i]!=dad[x][i])
                {
                    ans=max(ans,f[y][i]);
                    ans=max(ans,f[x][i]);
                    x=dad[x][i];
                    y=dad[y][i];
                }
            }
            return max(ans,max(f[y][0],f[x][0]));
        }
};
class lcA LCA;
bool MST()
{
    int num=0;
    for(int i=1;i<=m;i++)
    {
        int fx=find_(e[i].x),fy=find_(e[i].y);
        if(fx!=fy)
        {
            fa[fy]=fx;
            num++;
            insert(e[i].x,e[i].y,e[i].z);
            insert(e[i].y,e[i].x,e[i].z);
            if(num==n-1) break;
        }
    }
    return num==n-1;
}
int main()
{
    freopen("graph.in","r",stdin);
    freopen("graph.out","w",stdout);
    read(n);
    read(m);
    read(k);
    if(m==0)
    {
        printf("-1\n");
        return 0;
    }
    for(int i=1;i<=n;i++) fa[i]=i;
    for(int i=1;i<=m;i++)
    {
        read(e[i].x);
        read(e[i].y);
        read(e[i].z);
        if(e[i].x>e[i].y) swap(e[i].x,e[i].y);
    }
    sort(e+1,e+1+m);
    if(MST()||find_(1)==find_(n))
    {
        LCA.dfs(1);
        printf("%d\n",LCA.lca(1,n));
    }
    else
    {
        printf("-1\n");
        return 0;
    }
    return 0;
}
时间: 2024-11-05 19:39:35

2017 7.22 模拟赛的相关文章

10.22 模拟赛

10.22 模拟赛 T1 染色 考虑每个连通块删成一棵树就好了. mmp场上就我路径压缩写炸.... #include<iostream> #define MAXN 200006 using namespace std; int n , m; int fa[MAXN] , siz[MAXN] , book[MAXN] , sz[MAXN]; int find(int x) { return x == fa[x] ? x : fa[x] = find(fa[x]); } int main() {

2017 无奈的模拟赛

悲剧的开始~~~~ 竞赛时间:????年??月??日??:??-??:?? 题目名称 第二题 死亡 凝视 名称 two death eyesight 输入 two.in death.in eyesight.in 输出 two.out death.out eyesight.out 每个测试点时限 1 秒 1 秒 1 秒 内存限制 512MB 512MB 512MB 测试点数目 10 10 10 每个测试点分值 10 10 10 是否有部分分 无 无 无 题目类型 传统 传统 传统 注意事项(请务必

2017/9/13模拟赛

粉饰(decorate) [题目描述] 小D有一块被分为n*m个格子的矩形鱼片.为了装饰鱼片,小D决定给每个格子上色.由于小D很喜欢红白,所以小D给每个格子涂上了红色或白色,第i行第j列的格子颜色记为c[i,j].涂完之后,小D想评估这块鱼片的"XY值".我们定义一个有序无重复三元格子组{(x1,y1),(x2,y2),(x3,y3)}为"XY组"当且仅当: |(x1-x2)*(y1-y2)|+|(x3-x2)*(y3-y2)|=0   (c[x1,y1]-c[x2

2017/9/3模拟赛T1

题解:这题是一道判断题,分5种情况讨论,以下为了方便以ABC为例 ①若只有A,答案为A ②若A.B.C都有,答案为ABC ③若只有AB,答案为C ④若AAB式,答案为BC ⑤若只有A.B且AB均大等于2,答案为ABC 代码如下: 1 #include<cstdio> 2 #include<iostream> 3 using namespace std; 4 int n,cnt[3],cur; 5 char a[205]; 6 bool pd(){ 7 for(int i=0;i&l

2017/9/3模拟赛T2

题解:由于题目已经提示我们这是个单峰函数,所以很容易想到三分法,所以我们就枚举中位数,为保证平均数最大,左右两侧都从右往左取数. 代码如下: 1 #include<cstdio> 2 #include<iostream> 3 #include<algorithm> 4 #define MN 100005 5 using namespace std; 6 int n,a[MN],maxl,l,r,lm,rm; 7 long long sum[MN]; 8 double a

2017 6 11模拟赛

盘子序列 [题目描述] 有 n 个盘子.盘子被生产出来后,被按照某种顺序摞在一起.初始盘堆中如果一 个盘子比所有它上面的盘子都大,那么它是安全的,否则它是危险的.称初始盘堆为 A,另外有一个开始为空的盘堆 B.为了掩盖失误,生产商会对盘子序列做一些“处 理” ,每次进行以下操作中的一个:(1)将 A 最上面的盘子放到 B 最上面:(2)将 B 最上 面的盘子给你. 在得到所有n个盘子之后, 你需要判断初始盘堆里是否有危险的盘子. [输入格式] 输入文件包含多组数据(不超过 10 组) 每组数据的

2017/9/29模拟赛

T1.多米诺骨牌(card)小 Z 最近买了很多很多的多米诺骨牌,他选出了其中的一些排成了一排,并且准备从右到左碰倒这些骨牌.每个骨牌有一个坐标 xi(>=1)和一个大小 yi(>=1),倒下时将会碰倒坐标区间位于[xi-yi,xi)内的所有骨牌.当然没有两个骨牌有相同的坐标, 并且小 Z 规定坐标大的更靠右.但是他发现他买的骨牌太巨了,所以在倒下的时候会将所有碰倒的骨牌破坏掉,被破坏掉的骨牌就无法使用了,并且不会倒下.得知这个消息的小 Z 十分惊讶,他想知道如果还按刚才这种方法从右到左碰倒所

2017/11/3模拟赛

块(block)[问题描述]拼图达人小 C 手里有 n 个 1*1 的正方形方块, 他希望把这些方块拼在一起, 使得拼出的图形周长最小, 要求方块不能重叠. 擅长拼图的小 C 一下就求出了这个周长, 顺便他想考考你会不会求.[输入格式]多组数据, 第一行一个正整数 T, 表示数据组数.接下来 T 行, 每行一个正整数 n, 表示方块数.[输出格式]输出 T 行, 每行一个正整数, 表示答案.[样例输入]3 4 1122[样例输出]81420[数据范围]对于 20%的数据, n<=20:对于 40

2017/11/1模拟赛

磁星(magnet)[题目描述]在 B 城呆惯了的小 H 决定去外太空溜达一圈.人类现已发现并开发的星球(包括小 H 所在的星球)有 n 个,并且在这 n 个星球之中,人们发现了 m 对两个星球的关系.关系"xy"表示的是星球 x 对星球 y 有 1 一个单位的引导力,由于引导力还具有传递性,如果星球 x 对星球 y 能有恰好 a 个单位的引导力,星球y 对星球 z 能有恰好 b 个单位的引导力,那么星球 x 对星球 z 就能有恰好 a+b 个单位的引导力. 换言之,星球 x 对星球