精华内容
下载资源
问答
  • GSP5.exe

    2020-04-01 09:16:40
    简言之,《几何画板》的循环就是“图画”中的“图画”,循环记录可以用无限循环来定义,但是当你播放这些记录时,先要指定循环的深度,以确定有多少次重复,否则,记录文件的播放将不会停止。 [例]作“以三角形三边...
  • 题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 ...寻找连续的6,然后用n*(n+1)/2求出这一段的子串个数,然后每一段连续起来。 做的时候wa了很多,原来在n*(n+1...

    题目链接

    提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5

    1470-1482

    只做出来四道比较水的题目,还需要加强中等题的训练。

    题解:

    E666

    这个题是让求有多少个子串只含有6。寻找连续的6,然后用n*(n+1)/2求出这一段的子串个数,然后把每一段连续的加起来。

    做的时候wa了很多次,原来是在n*(n+1)的地方已经超过int型了,所以需要设置类型为long long。

    #include <cstdio>
    #include <iostream>
    #include <cstring>
    using namespace std;
    int T,N;
    char s[200005];
    long long sum;
    long long int tag;
    int main()
    {
    
        scanf("%d",&T);
        while(T--)
        {
            sum=0;
            tag=0;
            scanf("%d",&N);
            scanf("%s",s);
            for(int i=0;i<N;i++)
            {
    
                if(s[i]=='6')
                {
                    t
                    ag++;
                }
                else
                {
                    sum=sum+(tag*(tag+1))/2;
                    tag=0;
                }
            }
            long long int tt=tag*(tag+1)/2;
            sum+=tt;
            printf("%lld\n",sum);
        }
        return 0;
    }

    H Blocks

    队友看的这个题,说是裸地斐波那契数列,正好做过矩阵快速幂的于是就粘上了。

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    
    #define mod 1000000007
    
    using namespace std;
    
    struct matrix{
        long long int m[2][2];
    };
    
    matrix base,ans;
    
    void init(int n){//Ö»³õʼ»¯baseºÍans(µ¥Î»¾ØÕó)
        memset(base.m,0,sizeof(base.m));
        memset(ans.m,0,sizeof(ans.m));
        for(int i=0;i<2;i++){
            ans.m[i][i]=1;
        }
    
        base.m[0][0]=base.m[0][1]=base.m[1][0]=1;
    }
    
    matrix multi(matrix a,matrix b){
        matrix t;
        for(int i=0;i<2;i++){
            for(int j=0;j<2;j++){
                t.m[i][j]=0;
                for(int k=0;k<2;k++){
                    t.m[i][j]=(t.m[i][j]+a.m[i][k]*b.m[k][j])%mod;
                }
            }
        }
        return t;
    }
    
    long long int fast_matrix(long long int n){
        while(n){
            if(n&1){
                ans=multi(ans,base);
            }
            base=multi(base,base);
            n>>=1;
        }
        return ans.m[1][0];
    }
    
    int main()
    {
        long long int n;
        while(~scanf("%lld",&n) && n!=0){
            init(n+1);
            printf("%lld\n",fast_matrix(n+1));
        }
        return 0;
    }

    J Odd number

    最水的一个题,求奇数个数。

    #include <iostream>
    #include <cstdio>
    
    using namespace std;
    
    int main(){
        int n;
        int ans;
        long long t;
        while(~scanf("%d",&n)){
            ans=0;
            for(int i=0;i<n;i++){
                scanf("%lld",&t);
                if(t%2==1){
                    ans++;
                }
            }
            printf("%d\n",ans);
        }
    
        return 0;
    }

    K Candy

    糖果题,队友说就一个求n的m次方,只不过数非常大,这不就是快速幂吗!

    #include <iostream>
    #include <cstdio>
    #define MOD2 1000000007
    
    using namespace std;
    
    int T;
    int m,n;
    long long int rel;
    
    long long int fast_power(long long int a,long long int n){
        long long int ans=1,p=a;
        while(n){
            if(n&1){
                ans=((ans%MOD2)*(p%MOD2))%MOD2;
            }
            n>>=1;
            p=((p%MOD2)*(p%MOD2))%MOD2;
        }
        return ans;
    }
    
    int main()
    {
        scanf("%d",&T);
        while(T--)
        {
            scanf("%d%d",&n,&m);
            rel=fast_power(m,n);
            printf("%lld\n",rel);
        }
        return 0;
    }

     

    转载于:https://www.cnblogs.com/TWS-YIFEI/p/6129108.html

    展开全文
  • 定义每一的答案 每个块内连续数字的 段数 的和 -1 例如[6,4,3] ,[1,5] 就是 3,[6],[4,3] ,[1],[5] 之前做过一个原题,维护子树可以分成多少连续的段,如何维护? 两种方法: 第一种:dsu on a tree +...

    题目链接:https://codeforces.com/contest/1380/problem/E

    题目大意:

    具体题意比较繁琐,直接抽象出题意得操作

    有n个人,每个人有一个标号i,现在把这n个人初始分为m个组

    f(i)表示第i个组内连续段的数量

    每次合并后输出所有组f(i)的和-1

    例如[6,4,3] ,[1,5]就是 3,[6],[4,3] ,[1],[5]

     

    之前做过一个原题,维护子树可以分成多少个连续的段,如何维护?

    两种方法:

    第一种:dsu on a tree + 并查集

    另一种:树剖之后维护主席树就好了

    当时写的主席树维护,由于现在涉及到合并所以没办法主席树了

    所以就当补一下之前的写法

    对于每一个块而言,起初应该是有sz个连通块(大小),如果连边就会-1,考虑如何维护连边操作,用每个数去维护它的后驱:

    假设:

    [3,4,5] sz = 3

    维护3看一下4是否在里面  —— 是 sz--

    维护4看一下5是否在里面  —— 是 sz--

    维护5看一下6是否在里面  —— 否 sz不变

    所以就可以求出起初每个块内的答案

    然后开始维护每次操作后的,考虑每次操作,对于当前的两个集合来言,我们去遍历小的那个集合,而不是去遍历大的集合

    这样保证复杂度是nlogn的(考虑启发式合并 和 并查集按zhi合并的复杂度证明)

    于时这样就可以维护,小的集合加入到大的集合中 会产生怎样的变化,更新一下ans就好了

    整体复杂度在忽略unordered_map常数的情况下:nlogn + m

    Code:

    /*** keep hungry and calm CoolGuang!  ***/
    #pragma GCC optimize("Ofast","unroll-loops","omit-frame-pointer","inline")
    #pragma GCC optimize(3)
    #include <bits/stdc++.h>
    #include<stdio.h>
    #include<queue>
    #include<algorithm>
    #include<string.h>
    #include<iostream>
    #define debug(x) cout<<#x<<":"<<x<<endl;
    #define d(x) printf("%lld\n",x);
    typedef long long ll;
    typedef unsigned long long ull;
    using namespace std;
    const ll INF= 1e18;
    const ll maxn = 1e6+700;
    const int mod= 998244353;
    const int up = 1e9;
    template<typename T>inline void read(T &a){char c=getchar();T x=0,f=1;while(!isdigit(c)){if(c=='-')f=-1;c=getchar();}
    while(isdigit(c)){x=(x<<1)+(x<<3)+c-'0';c=getchar();}a=f*x;}
    ll n,m,p;
    ll num[maxn];
    int pre[maxn],sz[maxn];
    unordered_map<int,int>mp[maxn];
    int Find(int x){
        return pre[x] == x?x:pre[x] = Find(pre[x]);
    }
    int main(){
        read(n);read(m);
        for(int i=1;i<=n+m;i++) pre[i] = i;
        for(int i=1;i<=n;i++){
            read(num[i]);
            pre[i] = num[i]+n;
            mp[num[i]+n][i]++;
        }
    
        ll ans = 0;
        for(int i=n+1;i<=n+m;i++){
            ll temp = mp[i].size();
            for(auto x:mp[i])
                if(mp[i].count(x.first+1)) temp--;
            ans += (sz[i]=temp);
        }
        printf("%lld\n",ans-1);
        for(int i=1;i<=m-1;i++){
            int x,y;read(x);read(y);
            int dx=Find(x+n),dy=Find(y+n);
            if(dx != dy){
                if(mp[dx].size() < mp[dy].size()){
                    ans -= sz[dx];
                    ans -= sz[dy];
                    sz[dx] = 0;
                    for(auto t:mp[dx]){
                        int id = t.first;
                        mp[dy][id]++;
                        if(mp[dy].count(id-1) && mp[dy].count(id+1)) sz[dy]--;
                        else if(!mp[dy].count(id-1)  && !mp[dy].count(id+1)) sz[dy]++;
                    }
                    mp[dx].clear();
                    pre[dx] = dy;
                    ans += sz[dy];
                }else{
                    ans -= sz[dx];
                    ans -= sz[dy];
                    sz[dy] = 0;
                    for(auto t:mp[dy]){
                        int id = t.first;
                        mp[dx][id]++;
                        if(mp[dx].count(id-1) && mp[dx].count(id+1)) sz[dx]--;
                        else if(!mp[dx].count(id-1)  && !mp[dx].count(id+1)) sz[dx]++;
                    }
                    mp[dy].clear();
                    pre[dy] = dx;
                    ans += sz[dx];
                }
            }
            printf("%lld\n",ans-1);
        }
        return 0;
    }
    /***
    7 4
    1 2 3 3 1 4 3
    3 1
    2 3
    2 6
    ***/
    

    总结:

    上次atcoder的原题也是,维护颜色出现多少次,写过题解,链接不去翻了,也在启发式合并一栏

    遇到静态子集合并,先去考虑一下是否可以nlogn维护合并

     

    展开全文
  • 醉了。。。大水题一枚,一开始看错题,白敲了大半个小时。。最后5分钟敲了一份代码在结束前交上去。。。。wa test3 ...之后一看后台.....个if判断就 ac。...并计算一下当前字符串 要进行多少次f(x)操

    也是醉了。。。大水题一枚,一开始看错题,白敲了大半个小时。。最后5分钟敲了一份代码在结束前交上去。。。。wa test3

    之后一看后台.....加个if判断就 ac。。。

    题意:给一字符串, 遇到两个连续的点  【..】  计数器+1,并变成一个点,把这样的操作叫做f(x)

    m次查询

    每次给 X,C  ---->把源字符串的x位置替换为字符c

    并计算一下当前字符串 要进行多少次f(x)操作  才能完全没有连续的2个点【.】


    第一次for一下记录 源字符串要的f(x)数

    对每次查询  

    1  :如果输入的替换字符是【.】,如果位置x已经为【.】,不操作,否则把位置x填为【.】;

    2  :如果不是【.】,如果位置x原来是【.】,则判断x左右,如果左右都是【.】,计算器-2,若只有一个就减一,一个都没则不操作


    #include <cstdio>
    #include <cmath>
    #include <cstring>
    #include <string>
    #include <algorithm>
    #include <iostream>
    #include <queue>
    #include <map>
    #include <set>
    #include <vector>
    using namespace std;
    const __int64 maxn = 100005;
     char tm[300005];
    set<int> q;
    set<int>::iterator it,NEXT,sb; 
    int main()
    {
    	
    	char c;
    	int n,m,i,x;
    	scanf("%d%d",&n,&m);
    	getchar();
    	for (i=1;i<=n;i++)
    	{
    		scanf("%c",&tm[i]);
    		if (tm[i]=='.')
    		{
    			q.insert(i); 
    		}
    	}
    	getchar();
    int cun=0;
    	for (i=1;i<=n;i++)
    	{
    		if (tm[i]=='.'&& tm[i+1]=='.')
    			cun++;
    	}
    
    
    //	printf("%d\n",cun);
    	int k;
    	for (k=1;k<=m;k++)
    	{
    
    		scanf("%d %c",&x,&c);
    		getchar();
    	
    		
    		if (c=='.')
    		{
    			if (tm[x]!='.')
    			{
    			 	if ( q.count(x+1)&& q.count(x-1))
    				cun+=2;
    				else
    					 if ( q.count(x+1)|| q.count(x-1))
    				 cun++;
    
    					 q.insert(x);
    			}
    		}
    		else
    		{
    			if (q.count(x))
    			{
    				if ( q.count(x+1)&& q.count(x-1))
    				cun-=2;
    				else
    					 if ( q.count(x+1)|| q.count(x-1))
    				 cun--;
    
    				q.erase(x);
    			}
    
    		}
    				
    		tm[x]=c;
    		printf("%d\n",cun);
    
    	}
    
    
    
    
    	return 0;
    	
    	
    } 


    展开全文
  • 给出mmm询问,每次询问给出xxx和kkk,问xxx有多少个kkk代兄弟。(两个点互为kkk代兄弟的定义他们的kkk级祖先相同) 1≤n,m≤1051\leq n,m \leq 10^{5}1≤n,m≤105 做法: 所有点以深度为第一关键字,dfsdfsdfs...

    题目链接
    加强版例题(还没写)

    题意:

    给定一棵nn个结点的树。给出mm次询问,每次询问给出xxkk,问xx有多少个kk代兄弟。(两个点互为kk代兄弟的定义是他们的kk级祖先相同)
    1n,m1051\leq n,m \leq 10^{5}

    做法:

    把所有点以深度为第一关键字,dfsdfs序为第二关键字排序。然后kk代兄弟一定是在一段连续的区间中的,这样就转化成区间问题了。

    这题的话,排好序后,对询问点二分出左右边界,就可以找到它的所有kk代兄弟了。
    (加强版是求 kk代兄弟中的第kk大,用主席树维护一下区间的就好了)

    代码:

    #include<bits/stdc++.h>
    using namespace std;
    
    int n;
    vector<int>v[100005];
    int id[100005],idx,dep[100005],fa[100005][20];
    void dfs(int x,int pre)
    {
        if(x==0)dep[x]=0,fa[x][0]=0;
        else dep[x]=dep[pre]+1,fa[x][0]=pre;
        if(x!=0)id[x]=++idx;
        for(auto to:v[x])
        {
            if(to!=pre)
            {
                dfs(to,x);
            }
        }
    }
    
    bool cmp(int a,int b)
    {
        if(dep[a]!=dep[b])return dep[a]<dep[b];
        else return id[a]<id[b];
    }
    
    int getK(int x,int k)
    {
        for(int i=0;i<=18;i++)if((k>>i)&1)x=fa[x][i];
        return x;
    }
    
    int idd[100005];
    int wei[100005];
    int main()
    {
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
        {
            idd[i]=i;
            int x;
            scanf("%d",&x);
            v[x].push_back(i);
            v[i].push_back(x);
        }
        dfs(0,-1);
        for(int i=1;i<=18;i++)
        {
            for(int j=1;j<=n;j++)fa[j][i]=fa[fa[j][i-1]][i-1];
        }
        sort(idd+1,idd+n+1,cmp);
        for(int i=1;i<=n;i++)wei[idd[i]]=i;
        int m;
        scanf("%d",&m);
        while(m--)
        {
            int x,k;
            scanf("%d%d",&x,&k);
            int f=getK(x,k);
            if(f==0){printf("%d\n",0);continue;}
            int led,red;
            int l=1,r=wei[x];
            while(l<r)
            {
                int p=(l+r)/2;
                if(getK(idd[p],k)==f)r=p;
                else l=p+1;
            }
            led=l;
    
            l=wei[x],r=n;
            while(l<r)
            {
                int p=(l+r+1)/2;
                if(getK(idd[p],k)==f)l=p;
                else r=p-1;
            }
            red=l;
    
            printf("%d\n",red-led+1-1);
        }
        return 0;
    }
    
    
    展开全文
  • 2019数据运营思维导图

    2019-03-29 21:34:09
    每周登录1~2次的用户 中度用户:每周登录3~5次的用户 重度用户:每周登录6~7次的用户 解决问题 了解用户忠实度,能否走得动”口碑传播“ 在线统计 实时在线曲线(每5分钟统计一次当时的用户同时在线人数) 上周同期...
  • 数据运营思维导图

    2018-04-26 14:24:22
    中度用户:每周登录3~5次的用户 重度用户:每周登录6~7次的用户 解决问题 了解用户忠实度,能否走得动”口碑传播“ 在线统计 实时在线曲线(每5分钟统计一次当时的用户同时在线人数) 上周同期对比 平均同时...
  • TCP超时计算RTOx2,这样连续丢三包就变成RTOx8了,十分恐怖,而KCP启动快速模式后不x2,只是x1.5(实验证明1.5这个值相对比较好),提高了传输速度。 选择性重传 vs 全部重传: TCP丢包时会全部重传从丢的那个...
  • UGNX后处理器PUI版

    2018-07-04 07:36:23
    备注:独创的程序头输出刀具列表,在任何情况下,都准确的,比如同一刀具有多调用或hole_making编程或其它特殊刀具编程。 2、工序: 每个工序开头输出序列号N数,方便知道第几个工序和一共有多少个工序;...
  • 问题3-16:连续ARQ协议中的图3-6在第2印刷时改变了。为什么要进行这样的改变? 问题3-17:接收端对收到的帧进行CRC检验后,若发现有差错就丢弃这个帧。用户(人)下命令丢弃,还是高层软件下命令丢弃? 问题3-18...
  • 我不知道别的品牌的遥控器的电位器阻值都多大(我用FUTABA的),如果有原装电位器就是100k的,那就更好了,可以直接利用原来的电位器了,不再需要更换和加工,这时候最好一组切换开关,用来切换电位器连接到...
  • B3.3 使用卡洛变换近似一幅图像的误差是多少? 167 3.3 独立分量分析 173 3.3.1 什么是独立分量分析(ICA)? 173 3.3.2 什么是鸡尾酒会问题? 174 3.3.3 如何解鸡尾酒会问题? 174 3.3.4 中心极限定理说些什么...
  • 每个人到来时看到的鱼数是多少条? (28)约瑟夫环问题:编号为1,2,3,...,n的n个人按顺时针方向围坐一圈,每人持有一个正整数密码。一开始任选一个正整数m作为报数上限值,从第一个人开始按顺时针报数,报到m时停止...
  • 5、管理的观点 操作系统计算机硬件和软件资源的合理而协调的管理者。 6、 操作系统一个大型的程序系统,它负责计算机的全部软、硬件资源的分配、调度工作,控制并协调并发活动,实现信息的存取和保护。它提供...
  • 变量的地址是C编译系统分配的,用户不必关心具体的地址是多少。 变量的地址和变量值的关系如下: &a--->a567 a为变量名,567是变量的值,&a是变量a的地址。在赋值表达式中给变量赋值,如: a=567 在赋值号左边是变量...
  • 篮球社团网站V2.0 .net

    2010-12-21 11:04:16
    1892年,奈史密斯制定了13条比赛规则,主要规定不准持球跑,不准有粗野动作,不准用拳击球,否则即判犯规连续犯规判负1分;比赛时间规定为上、下半时,各15分钟;对场地大小也作了规定。上场比赛...
  • 子网掩码决定的一个子网的计算机数目,计算机公式2的m次方,其中,我们可以m看到后面的多少颗0。如255.255.255.0转换成二进制,那就是11111111.11111111.11111111.00000000,后面有8颗0,那m就是8,255.255....
  • 问题4-27:在因特网中最常见的分组长度大约是多少个字节? 问题4-28:IP数据报的最大长度是多少个字节? 问题4-29:IP数据报的首部的最大长度是多少个字节?典型的IP数据报首部是多长? 问题4-30:IP数据报在传输的...

空空如也

空空如也

1 2 3 4
收藏数 80
精华内容 32
关键字:

把5连续加5次是多少