蓝桥杯最终冲刺(冲刺Day2)

1.含2天数(20年国赛——3月16日)

 

 

思路:这一天的年月日中只要有一个2即符合条件

 

#include <iostream>
using namespace std;

bool isyear(int x)
{
  return (x % 400 == 0 || x % 4 == 0 && x % 100 != 0);
}

bool check(int n)
{
  while(n)
  {
    if(n % 10 == 2)
      return true;
    n /= 10;
  }
  return false;
}

int main()
{
  int cnt = 0;
  for(int i = 1900; i <= 9999; i ++)//枚举年份
  {
    if(check(i)) //年份包含2
    {
      if(isyear(i)) cnt += 366;
      else cnt += 365;
    }
    else
    {
      if(isyear(i))
        cnt += 180;//每个月含2天数 + 2月 + 12月
      else
        cnt += 179;
    }
  }
  cout << cnt << endl;
  return 0;
}

 2.蓝桥幼儿园(3月21日)

 

 

OP 判定

 

#include <bits/stdc++.h>
using namespace std;
const int MAXN = 2e5+10;
int fa[MAXN];
void init(int n){
    for(int i=1;i<=n;i++){
        fa[i] = i;
    }
}
int find(int x){
    return x==fa[x] ? fa[x] : (fa[x]=find(fa[x]));
}
void merge(int x,int y){
    int fx = find(x);
    int fy = find(y);
    if(fx!=fy){
        fa[fx] = fy; 
    }
}
int main()
{
    int n,m;
    cin >> n >> m;
    init(n);
    for(int i=0;i<m;i++){
        int t,x,y;
        cin >> t >> x >> y;
        if(t==1){
            merge(x,y);
        }else{
            if(find(x)==find(y)){
                cout << "YES" << endl;
            }else{
                cout << "NO" << endl;
            }
        }
    }
 }

 3.七星填数(16年国赛——3月27日)

 

暴力就完事了 

 

#include <iostream>
#include <algorithm>
using namespace std;
int a[11]={1,2,3,4,5,7,8,9,10,12,13};
int main()
{
    do{
    int sum=a[0]+a[1]+a[2]+a[3];
    if(6+a[2]+a[5]+11==sum&&6+a[1]+a[4]+14==sum&&a[0]+a[4]+a[6]+a[9]==sum&&a[3]+a[5]+a[7]+a[10]==sum
      &&14+a[6]+a[8]+a[10]==sum&&a[9]+a[8]+a[7]+11==sum){
        printf("%d %d %d %d",a[0],a[1],a[2],a[3]);
    }
    }while(next_permutation(a,a+11));
     return 0;
}

 4.日志统计(18年省赛——3月13日)

 

 

 该题为二刷题,解题思路与第一次做一致,所以就直接上代码了

#include<cstdio>
#include<algorithm>
using namespace std;
int n,d,k;
int nowlike[100005];
struct node{
    int ts;
    int id;
};
node arr[100005];
bool ishot[100005];
bool cmp(node x,node y)
{
    return x.ts<y.ts;
}
int main()
{
    scanf("%d%d%d",&n,&d,&k);
    for(int i=1;i<=n;i++)
        scanf("%d%d",&arr[i].ts,&arr[i].id);
    sort(arr+1,arr+1+n,cmp);
    int l = 1;
    for(int i=1;i<=n;i++)
    {  
            nowlike[arr[i].id]++;
        while(arr[i].ts >= arr[l].ts + d) nowlike[arr[l++].id]--;
        if(nowlike[arr[i].id]>=k) ishot[arr[i].id] = true;
    }
    for(int i=0;i<=100005;i++)
        if(ishot[i])
            printf("%d\n",i);
    return 0;
}

 5.子串分值

 

#include <iostream>
#include <vector>
using namespace std;

vector<int> pos[26];    
int main() {
    string s;
    cin >> s;
    int lgh = s.length();
    
    for(int i = 0; i < lgh; i++) {
        int index = s[i] - 'a';
        if(!pos[index].size())  pos[index].push_back(-1);   
        pos[index].push_back(i);
    }
  
    for(int i = 0; i < 26; i++)
        if(pos[i].size())   pos[i].push_back(lgh);
  
    long long ans = 0;
    for(int i = 0; i < 26; i++)
        if(pos[i].size())
            for(int j = 1; j < pos[i].size() -1; j++) 
                ans += (pos[i][j] - pos[i][j - 1] - 1) + (pos[i][j + 1] - pos[i][j] -1)
                + 1ll * (pos[i][j] - pos[i][j - 1] - 1) * (pos[i][j + 1] - pos[i][j] - 1);
    ans += lgh; 
    cout << ans << endl;
    return 0;
}

 6.小数第N位

 

#include <iostream>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <vector>
#include <queue>
#define ll long long
using namespace std;
int b;
long long qpow(ll base,ll num)
{
    long long ans=1,r=1;
    while(num)
    {
        if(num&1)
        {
            ans=base*ans%(b*1000);
        }
        num>>=1;
        base=base*base%(b*1000);
    }
    return ans;
}
int main()
{
    ll a,c;
    cin>>a>>b>>c;
    cout<<(a*qpow(10,c+2)%(b*1000)/b);
    return 0;
}

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小灰QAQ

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

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

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

打赏作者

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

抵扣说明:

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

余额充值