codeforce(10.24)

142 篇文章 0 订阅
92 篇文章 0 订阅

只出了两道题,c题想了半天没有思路,与自己学的知识都对不上号,遇到个特殊问法就直接懵了,还是做题做得少,代码实现能力不强,对字符串的操作也不够熟练,以后要多多练习这一方面 ,刷题还是要分专题的刷,这样记得才会牢固,对问题的敏感度才会提高,不然拿过一道题来看着啥题型都像或者啥都不像就不大好了

A题

答案要么是1,要么是0,加起来的总和能被2整除就是0,否则为1

#include<iostream>
#include<cstring>
#include<algorithm>
#include<string>
#include<cstdio>
#include<iomanip>
#include<map>
#include<cmath>
#include<vector>
#include<queue>
#include<deque>
#include<stack>
#include<set>
#include<ctime>
#define ll long long
#define CHECK(x,y) (x>0&&x<=n&&y>0&&y<=m)
const int inf=0x3f3f3f3f;
const int mod=1e9;
const int N=1e6+5;
using namespace std;
int main(){
   //freopen("in.txt","r",stdin);
    int t,a,b,c;
    scanf("%d",&t);
    while(t--){
        scanf("%d%d%d",&a,&b,&c);
        int sum=a*1+b*2+c*3;
        if(sum%2==0) cout<<0<<endl;
        else cout<<1<<endl;
    }
    return 0;
}

B题

统计1和0的个数m1和m0,0有两个选择,要么选上要么不选,答案就是1的个数乘以2的m0次方

#include<iostream>
#include<cstring>
#include<algorithm>
#include<string>
#include<cstdio>
#include<iomanip>
#include<map>
#include<cmath>
#include<vector>
#include<queue>
#include<deque>
#include<stack>
#include<set>
#include<ctime>
#define ll long long
#define CHECK(x,y) (x>0&&x<=n&&y>0&&y<=m)
const int inf=0x3f3f3f3f;
const int mod=1e9;
const int N=1e6+5;
using namespace std;
int main(){
   //freopen("in.txt","r",stdin);
    int t,n,a[66];
    scanf("%d",&t);
    while(t--){
        scanf("%d",&n);
        int m1=0,m0=0;
        for(int i=1;i<=n;i++){
            scanf("%d",&a[i]);
            if(a[i]==0) m0++;
            if(a[i]==1) m1++;
        }
        ll ans=m1*pow(2,m0);
        cout<<ans<<endl;
    }
    return 0;
}

Grandma Capa Knits a Scarf

        用贪心的思想,在网上看题解说是双指针,其实就是把26个字母都遍历一遍,用l从头开始遍历,用r从尾部开始遍历,s[l]==s[r]就l++,r--,若不等则若s[l]==c,说明这个字符可以删,l再后移,否则如果s[r]==c,说明字符可以删,r前移,若都不等于这个字符,说明删除这个字符是构不成回文串的,让cnt等于个最大值直接break掉循环,开始试删下一个字母

#include<iostream>
#include<cstring>
#include<algorithm>
#include<string>
#include<cstdio>
#include<iomanip>
#include<map>
#include<cmath>
#include<vector>
#include<queue>
#include<deque>
#include<stack>
#include<set>
#include<ctime>
#define ll long long
#define CHECK(x,y) (x>0&&x<=n&&y>0&&y<=m)
const int inf=0x3f3f3f3f;
const int mod=1e9;
const int N=1e6+5;
using namespace std;
int main(){
    //freopen("in.txt","r",stdin);
    int t,n;
    char s[100005];
    scanf("%d",&t);
    while(t--){
        scanf("%d%s",&n,s+1);
        int ans=-1;
        for(char c='a';c<='z';++c){
            int cnt=0,l=1,r=n;
            while(l<r){
                if(s[l]==s[r]) ++l,--r;
                else{
                    if(s[l]==c) ++l,++cnt;
					else if(s[r]==c) --r,++cnt;
					else {cnt=1e9;break;}
                }

            }
            if(cnt!=1e9&&(ans==-1||cnt<ans)) ans=cnt;
        }
        cout<<ans<<endl;
    }
    return 0;
}

Vupsen, Pupsen and 0

        如果n为偶数,两两凑0,比如x,y,在b中就是-y,x;

如果n为奇数,从1到n-1重复上面的步骤,然后对b[1]和b[n]做操作(让前两个数和最后一个数构造0就行)

#include<iostream>
#include<cstring>
#include<algorithm>
#include<string>
#include<cstdio>
#include<iomanip>
#include<map>
#include<cmath>
#include<vector>
#include<queue>
#include<deque>
#include<stack>
#include<set>
#include<ctime>
#define ll long long
#define CHECK(x,y) (x>0&&x<=n&&y>0&&y<=m)
const int inf=0x3f3f3f3f;
const int mod=1e9;
const int N=1e6+5;
using namespace std;
int main(){
    //freopen("in.txt","r",stdin);
    int t,n,a[100005],b[100005];
    scanf("%d",&t);
    while(t--){
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
            scanf("%d",&a[i]),b[i]=0;
        if(!(n&1)){
            for(int i=1;i<=n;i++)
                if(i&1)b[i]=a[i+1];
            else b[i]=-a[i-1];
        }
        else{
            for(int i=1;i<n;i++)
                if(i&1) b[i]=a[i+1];
            else b[i]=-a[i-1];
            while(b[1]==0||b[n]==0){
                b[n]+=a[1];
                b[1]-=a[n];
            }
        }
        for(int i=1;i<=n;i++)
            cout<<b[i]<<" ";
        cout<<endl;
    }
    return 0;
}

F1 Korney Korneevich and XOR (easy version)

        求上升子序列(所有)的异或和有几个,分别输出;f[j]代表异或和为j时最后一个元素值

(2条消息) F1 - Korney Korneevich and XOR (easy version)(暴力+简单DP)_Silly_d0g的博客-CSDN博客

#include<iostream>
#include<cstring>
#include<algorithm>
#include<string>
#include<cstdio>
#include<iomanip>
#include<map>
#include<cmath>
#include<vector>
#include<queue>
#include<deque>
#include<stack>
#include<set>
#include<ctime>
#define ll long long
#define CHECK(x,y) (x>0&&x<=n&&y>0&&y<=m)
const int inf=0x3f3f3f3f;
const int mod=1e9;
const int N=1e6+5;
using namespace std;
int main(){
   // freopen("in.txt","r",stdin);
    int n,x,f[520];
    scanf("%d",&n);
    memset(f,inf,sizeof(f));
    for(int i=1;i<=n;i++){
        scanf("%d",&x);
        f[x]=min(f[x],x);
        for(int j=0;j<=512;j++)
            if(x>=f[j]) f[j^x]=min(f[j^x],x);
    }
    set<int>s;
    for(int i=0;i<=512;i++) if(f[i]!=inf) s.insert(i);
    cout<<s.size()<<endl;
    for(auto it:s){
        cout<<it<<" ";
    }
    cout<<endl;
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

killer_queen4804

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值