渣渣一枚
总共做了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 &