• ABC196


    ABC196

    • A
    #include <iostream>
    #include <cstdio>
    using namespace std;
    int main() 
    {
    	int a,b,c,d; cin>>a>>b>>c>>d;
    	cout<<(b-c)<<endl;
    	return 0;
    }
    
    • B
    #include <iostream>
    #include <cstdio>
    #include <cstring>
    using namespace std;
    char a[10003];
    int main() 
    {
    	cin>>(a+1);
    	int len=strlen(a+1);
    	for(int i=1;i<=len;++i)
    	{
    		if(a[i]=='.') break;
    		cout<<a[i];
    	}
    	return 0;
    }
    
    • C

    比赛时莫名其妙爆了5个点

    题意:给定的是一个整数N。有多少个介于1和N(含)之间的整数x满足以下条件?x的十进制表示法(不带前导零)有偶数位数,其上半部分和下半部分作为字符串相等。

    #include <iostream>
    #include <cstdio>
    #define int long long
    using namespace std;
    signed main()
    {
    	long long n;cin>>n;
    	for(int i=1,tmp;i;++i)
    	{
    		if(i==1) tmp=11;
    		if(i==10) tmp=101;
    		if(i==100) tmp=1001;
    		if(i==1000) tmp=10001;
    		if(i==10000) tmp=100001;
    		if(i==100000) tmp=1000001;
    		if(i*tmp>n) return cout<<i-1<<'
    ',0;
    	}
    	return 0;
    }
    
    • D

    题意:一个长方形的房间,长H米,宽W米,我们将用A个2×1的长方形和B个1×1点正方形垫子来覆盖,保证2A+B=HW,且H×W<=16,求摆放方式个数(旋转、对称后相同算不同种)

    题解:搜索,从左上角的格子开始,执行DFS,尝试放置一个正方形的榻榻米垫子,一个从左边或下面伸出的长方形榻榻米垫子,然后我们可以穷尽地搜索所有覆盖的方法;看到16想到状压。

    #include <iostream>
    #include <cstdio>
    using namespace std;
    int h,w,A,B,ans;
    void dfs(int i,int bit,int a,int b)//已摆放格子个数,当前状态,A,B剩余个数 
    {
    	if(i==h*w) return ++ans,void();
    	if(bit&1<<i) dfs(i+1,bit,a,b);//已摆放此格 
    	if(b) dfs(i+1,bit|1<<i,a,b-1);//放1*1 
    	if(a){
    		if(i%w!=w-1&&~bit&1<<i+1) dfs(i+2,bit|1<<i|1<<i+1,a-1,b);//横放
    		if(i+w<=h*w&&~bit&1<<i+w) dfs(i+1,bit|1<<i|1<<i+w,a-1,b);//竖放
    	}
    }
    int main()
    {
    	cin>>h>>w>>A>>B; dfs(0,0,A,B);
    	cout<<ans<<'
    ';
    	return 0;
    }
    
    • E

    给定整数序列A=(a1,a2,…,an),T=(t1,t2,…,tn)和X=(x1,x2,…,xq)。让我们定义N个函数f1(X),f2(X),…,fn(X)如下:1.png

    题解:这篇(戳)写得很易懂,思维题,要联想到函数图像

    #include <iostream>
    #include <cstdio>
    #define int long long
    using namespace std;
    const int inf=2e18;
    int clamp(int x,int mn,int mx){
    	if(x>mx) return mx;
    	if(x<mn) return mn;
    	return x;
    }
    signed main()
    {
    	int n,low=-inf,high=inf,bias=0; scanf("%lld",&n);
    	for(int i=1,a,t;i<=n;++i)
    	{
    		scanf("%lld%lld",&a,&t);
    		if(t==1) low+=a,high+=a,bias+=a;
    		else if(t==2) low=max(low,a),high=max(high,a);
    		else low=min(low,a),high=min(high,a);
    	}
    	int q,x; scanf("%lld",&q);
    	while(q--) scanf("%lld",&x),cout<<clamp(x+bias,low,high)<<'
    ';
    	return 0;
    }
    
    • F

    题意:给定由0和1组成的字符串S和T。我们将更改T中的一些字符,使T成为S的子字符串。我们至少需要更改多少个字符?

    知识点未学(略)

    ABC196官方题解

  • 相关阅读:
    Django知识总结(一)
    Django知识总结(二)
    Django知识总结(三)
    机器学习领域主要术语的英文表达
    Python的进程与线程--思维导图
    MySQL数据库--思维导图
    5.18 每日小三练
    5.14 每日小三练
    5.12 每日小三练
    5.9 每日小三练
  • 原文地址:https://www.cnblogs.com/wuwendongxi/p/14565942.html
Copyright © 2020-2023  润新知