A. Circle Metro
题意:有两条线路线路,一条是正着走的,一条是倒着走的,一个人在第一条,一个人在第二条,给你两个人的起点和终点,问你是否能相遇。
#include#include #include #include #include #include #include #include
B. Pairs
题意:给你n对数ai和bi,问你是否存在两个数x,y使得在每一对数中至少出现一个x,或者一个y。
#include#include #include #include #include #include #include #include
C. Increasing by Modulo
题意:给你n个数,每次可以是一些数字加1并取余m,求最小的操作次数使数列非递减。
思路:二分操作次数即可
#include#include #include #include #include #include #include #include
D. Good Triple
题意:给你一个字符串,问你存在Sn=Sn+k=Sn+2*k 的区间数量是多少
思路:猜测,当长度大于20时必定存在上述的式子,所以20以下直接暴力即可
#include#include #include #include #include #include #include #include
E. And Reachability
题意:
思路:dp[i][j]表示第i位,&1<<j!=0 最近的那个数是多少(倒着更新)
#include#define rep(i,a,b) for(int i=a;i<=b;i++)#define dep(i,a,b) for(int i=b;i>=a;i--)using namespace std;#define ll long longconst int N=3e5+5;const int M=20;int n,m,q,sum,a[N],dp[N][25],last[N],x,y,flag;ll rd(){ ll x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){ if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();} return x*f;}int main(){ n=rd();m=rd(); rep(i,1,n) a[i]=rd(); rep(i,0,M) dp[n+1][i]=n+1,last[i]=n+1; dep(i,1,n) { rep(j,0,M) dp[i][j]=n+1; rep(j,0,M) if((a[i]&(1<