T1.循环流
一堆特判
if(a>0 && ((a%2==0 && n>2)||(a%2==1))) putchar('1');
写成了
if(a>0 && ((a%2==0 && a>2)||(a%2==1))) putchar('1');
100pts → \to → 35pts!
我服我自己!
#include<bits/stdc++.h>
using namespace std;
int tk,n,a,b;
int main(){
// freopen("flow.in","r",stdin);
// freopen("flow.out","w",stdout);
for(scanf("%d%d",&a,&tk);tk;--tk){
scanf("%d%d%d",&n,&a,&b);
if(n-1>a+b) putchar('0');
else if((!a)||(!b)){
a=a+b-(n-1);
if(a>0 && ((a%2==0 && n>2)||(a%2==1))) putchar('1');
else putchar('0');
}else if(b<n-1){
a-=(n-1-b);if(a>1) putchar('1');else putchar('0');
}else{
if(b>n-1){
if((b-n)%2==0 || n>2){
if((a%2==0) || (a%2==1 && a>1 && n>2)) putchar('1');
else putchar('0');
}else{
if(a%2==0 && a>1) putchar('1');
else putchar('0');
}
}else{
if(a<2) putchar('0');
else if(a%2==0 || n>2) putchar('1');
else putchar('0');
}
}
if(tk>1) putchar('\n');
}
fclose(stdin);fclose(stdout);
return 0;
}
T2.整除分块
究极找规律神题:
首先不出现在 ⌊ n i ⌋ \lfloor\dfrac ni \rfloor ⌊in⌋的数 k k k一定满足:
⌊ n ⌊ n k ⌋ ⌋ > k → n % k ≥ ⌊ n k ⌋ , k > ⌊ n ⌋ \lfloor\dfrac {n}{\lfloor\frac nk \rfloor} \rfloor>k\to n\%k\geq \lfloor\dfrac nk \rfloor,k>\lfloor\sqrt n \rfloor ⌊⌊kn⌋n⌋>k→n%k≥⌊kn⌋,k>⌊n⌋
故 k k k不出现的数的区间:
[ a i + a , a i + i − 1 ] ( 1 ≤ a < i ) [ai+a,ai+i-1](1\leq a<i) [ai+a,ai+i−1](1≤a<i)即:
[ i + 1 , 2 i − 1 ] , [ 2 i + 2 , 3 i − 1 ] , . . . , [ i 2 − 1 , i 2 − 1 ] [i+1,2i-1],[2i+2,3i-1],...,[i^2-1,i^2-1] [i+1,2i−1],[2i+2,3i