赛码"BestCoder"杯中国大学生程序设计冠军赛

渣渣一枚


总共做了4个题目.先总结下吧.题目质量很高.
题目链接
1001
这个题目第一眼就是hdu之前的题目今年暑假不AC.只选三个,那么就是左右两边贪心取优.

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#define MOD 4294967296

using namespace std;
typedef unsigned int LL;
int T;
int n;
const int N=10000005;
LL s1,e1;
LL L1,R1,L2,R2;
LL minL,minR,maxL,maxR;
LL a,b,c,d;
LL p[N],q[N];
bool flag;
int main()
{
  #ifdef ONLINE_JUDGE
  #else
    freopen("test.in","r",stdin);
  #endif
  scanf("%d",&T);
  while(T--)
  {
    cin>>n>>s1>>e1>>a>>b>>c>>d;
    p[1]=s1;
    q[1]=e1;
    for(int i=2;i<=n;i++)
    {
      p[i]=p[i-1]*a+b;
      q[i]=q[i-1]*c+d;
    }
    for(int i=1;i<=n;i++)
    {
      if(p[i]>q[i])
      {
        swap(p[i],q[i]);
      }
      if(i==1)
      {
        minL=maxL=p[1];
        minR=maxR=q[1];
      }
      else
      {
        if(q[i]<minR)
        {
          minL=p[i];
          minR=q[i];
        }
        if(p[i]>maxL)
        {
          maxL=p[i];
          maxR=q[i];
        }
      }
    }
    flag=false;
    for(int i=1;i<=n;i++)
    {
      if(p[i]>minR&&q[i]<maxL)
      {
        flag=true;
        break;
      }
    }
    printf("%s\n",flag?"YES":"NO");
  }
  return 0;
}

1002
求图中奇数环和偶数环,这个大神的代码可以当模板了…
官方题解是说二分图染色+Tarjan
染色法

#pragma comment(linker, "/STACK:102400000,102400000")
#include <iostream>
#include <queue>
#include <bitset>
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
const int maxn = 100005;
const int maxm = 600005;
struct Edge
{
    int v, vis;
    Edge *next;
}*H[maxn], E[maxm], *edges;
int vis[maxn];
int n, m, ok1, ok2;

void read(int& x)
{
    x = 0;
    char c = getchar();
    while(c < '0' || c > '9') c = getchar();
    while(c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
}

void addedges(int u, int v)
{
    edges->vis = 0;
    edges->v = v;
    edges->next = H[u];
    H[u] = edges++;
}

void init()
{
    edges = E;
    memset(H, 0, sizeof H);
    memset(vis, -1, sizeof vis);
}

void dfs(int u, int fa)
{
    for(Edge *e = H[u]; e; e = e->next) if(e->v != fa){
        int v = e->v;
        if(vis[v] != -1) {
            if(vis[v] == vis[u]) ok1 = 1;
            else ok2 = 1;
        }
        if(!e->vis) e->vis = 1, vis[v] = vis[u] ^ 1, dfs(v, u);///改变状态,0->1 1->0 二分图染色
    }
    vis[u] = -1;///标志在最后修改,说明这个点仍可用于其他边
}

void work()
{
    int u, v;
    init();
    scanf("%d%d", &n, &m);
    //read(n), read(m);
    for(int i = 1; i &
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值