C题大水题,欧拉筛筛下素数,然后在线处理一下普通素数。
1 #include <bits/stdc++.h> 2 #define ll long long 3 #define scan(i) scanf("%d",&i) 4 #define scanl(i) scanf("%lld",&i) 5 #define scand(i) scanf("%lf",&i) 6 #define pf printf 7 #define f(i,a,b) for(int i=a;i<=b;i++) 8 const int N=1e7; 9 int phi[N+10],prime[N+10],tot,ans; 10 bool mark[N+10]; 11 void getphi() { 12 int i,j; 13 phi[1]=1; 14 for(i=2;i<=N;i++){ 15 if(!mark[i]){ 16 prime[++tot]=i;//筛素数的时候首先会判断i是否是素数。 17 phi[i]=i-1;//当 i 是素数时 phi[i]=i-1 18 } 19 for(j=1;j<=tot;j++){ 20 if(i*prime[j]>N) break; 21 mark[i*prime[j]]=1;//确定i*prime[j]不是素数 22 if(i%prime[j]==0){//接着我们会看prime[j]是否是i的约数 23 phi[i*prime[j]]=phi[i]*prime[j];break; 24 } 25 else phi[i*prime[j]]=phi[i]*(prime[j]-1);//其实这里prime[j]-1就是phi[prime[j]],利用了欧拉函数的积性 26 } 27 } 28 } 29 //调用时,给出getphi();即可,mark[i]是false说明是素数,否则是合数 30 31 bool isPrime(int num) 32 { 33 if (num == 2 || num == 3) 34 { 35 return true; 36 } 37 if (num % 6 != 1 && num % 6 != 5) 38 { 39 return false; 40 } 41 for (int i = 5; i*i <= num; i += 6) 42 { 43 if (num % i == 0 || num % (i+2) == 0) 44 { 45 return false; 46 } 47 } 48 return true; 49 } 50 51 using namespace std; 52 int n,m,T; 53 int l,r; 54 int main() 55 { 56 getphi(); 57 scan(T); 58 f(kk,1,T){ 59 scanf("%d%d",&l,&r); 60 if(r<=1000){ 61 int cnt=0; 62 f(i,l,r){ 63 if(mark[i]==false) cnt++; 64 } 65 if(cnt*3<r-l+1) pf("Yes\n"); 66 else pf("No\n"); 67 } 68 else if(r-l+1>=12){ 69 pf("Yes\n"); 70 } 71 else{ 72 int cnt=0; 73 f(i,l,r){ 74 if(isPrime(i)) cnt++; 75 } 76 if(cnt*3<r-l+1) pf("Yes\n"); 77 else pf("No\n"); 78 } 79 } 80 return 0; 81 }
F题小水题,离线打表O(1)查询。要预处理一下立方数,会快一点。
1 #include <bits/stdc++.h> 2 #define ll long long 3 #define scan(i) scanf("%d",&i) 4 #define scanl(i) scanf("%lld",&i) 5 #define scand(i) scanf("%lf",&i) 6 #define pf printf 7 #define f(i,a,b) for(int i=a;i<=b;i++) 8 const double eps=1e-8; 9 using namespace std; 10 int ans[604]={ 11 0,0,0, 12 0,0,1, 13 0,1,1, 14 1,1,1, 15 -5001,0,0, 16 -5001,0,0, 17 -1,-1,2, 18 0,-1,2, 19 0,0,2, 20 0,1,2, 21 1,1,2, 22 297,-641,619, 23 7,-11,10, 24 -5001,0,0, 25 -5001,0,0, 26 2,-1,2, 27 0,2,2, 28 1,2,2, 29 75,-218,215, 30 0,-2,3, 31 1,-2,3, 32 28,-86,85, 33 -5001,0,0, 34 -5001,0,0, 35 2,2,2, 36 1839,-2683,2357, 37 0,-1,3, 38 0,0,3, 39 0,1,3, 40 1,1,3, 41 -5001,0,0, 42 -5001,0,0, 43 -5001,0,0, 44 -5001,0,0, 45 2,-1,3, 46 0,2,3, 47 1,2,3, 48 0,-3,4, 49 1,-3,4, 50 -5001,0,0, 51 -5001,0,0, 52 -5001,0,0, 53 -5001,0,0, 54 2,2,3, 55 -5,-7,8, 56 2,-3,4, 57 3,-2,3, 58 6,-8,7, 59 -2,-2,4, 60 -5001,0,0, 61 -5001,0,0, 62 602,-796,659, 63 -5001,0,0, 64 3,-1,3, 65 0,3,3, 66 1,3,3, 67 0,-2,4, 68 1,-2,4, 69 -5001,0,0, 70 -5001,0,0, 71 -1,-4,5, 72 0,-4,5, 73 2,3,3, 74 0,-1,4, 75 0,0,4, 76 0,1,4, 77 1,1,4, 78 -5001,0,0, 79 -5001,0,0, 80 2,-4,5, 81 11,-21,20, 82 2,-1,4, 83 0,2,4, 84 1,2,4, 85 -5001,0,0, 86 -5001,0,0, 87 -5001,0,0, 88 -5001,0,0, 89 26,-55,53, 90 -19,-33,35, 91 2,2,4, 92 3,3,3, 93 847,-1317,1188, 94 3,-2,4, 95 -5001,0,0, 96 -5001,0,0, 97 -5001,0,0, 98 -1972,-4126,4271, 99 3,-4,5, 100 6,-7,6, 101 3,-1,4, 102 0,3,4, 103 1,3,4, 104 -5,-5,7, 105 -5001,0,0, 106 -5001,0,0, 107 14,-22,20, 108 17,-22,18, 109 0,-3,5, 110 2,3,4, 111 -3,-6,7, 112 4,-3,4, 113 118,-239,229, 114 -5001,0,0, 115 -5001,0,0, 116 -4,-7,8, 117 2,-3,5, 118 947,-1309,1117, 119 -948,-1165,1345, 120 146,-1019,1018, 121 -5001,0,0, 122 148,-1040,1039, 123 -5001,0,0, 124 -5001,0,0, 125 -5001,0,0, 126 8,-12,11, 127 -1,-2,5, 128 0,-2,5, 129 3,3,4, 130 -2,-6,7, 131 4,-2,4, 132 -5001,0,0, 133 -5001,0,0, 134 -1,-1,5, 135 0,-1,5, 136 0,0,5, 137 0,1,5, 138 1,1,5, 139 0,4,4, 140 1,4,4, 141 -5001,0,0, 142 -5001,0,0, 143 2,-1,5, 144 0,2,5, 145 1,2,5, 146 2,-6,7, 147 2,4,4, 148 -9,-11,13, 149 -77,-86,103, 150 -5001,0,0, 151 -5001,0,0, 152 2,2,5, 153 -3,-7,8, 154 -5001,0,0, 155 3,-2,5, 156 -7,-8,10, 157 108,-149,127, 158 1528,-2366,2131, 159 -5001,0,0, 160 -5001,0,0, 161 260,-367,317, 162 3,-1,5, 163 0,3,5, 164 1,3,5, 165 3,-6,7, 166 3,4,4, 167 -5001,0,0, 168 -5001,0,0, 169 -5001,0,0, 170 80,-130,119, 171 2,3,5, 172 20,-31,28, 173 4,-3,5, 174 226,-1134,1131, 175 -45,-47,58, 176 -5001,0,0, 177 -5001,0,0, 178 -5001,0,0, 179 56,-172,170, 180 0,-7,8, 181 1,-7,8, 182 67,-87,71, 183 -5001,0,0, 184 -5001,0,0, 185 7,-8,7, 186 -5001,0,0, 187 -5001,0,0, 188 2,-7,8, 189 -10,-13,15, 190 3,3,5, 191 -5001,0,0, 192 4,-2,5, 193 9,-14,13, 194 10,-17,16, 195 -5001,0,0, 196 -5001,0,0, 197 5,-4,5, 198 27,-58,56, 199 4,-1,5, 200 0,4,5, 201 1,4,5, 202 4,-6,7, 203 4,4,4, 204 -5001,0,0, 205 -5001,0,0, 206 -5001,0,0, 207 3,-7,8, 208 2,4,5, 209 148,-195,161, 210 15,-24,22, 211 73,-114,103}; 212 int l,r; 213 struct p{ 214 int a;int b;int c; 215 p(){} 216 p(int aa,int bb,int cc){ 217 a=aa; 218 b=bb; 219 c=cc; 220 } 221 }vec[202]; 222 int main() 223 { 224 /*freopen("in.txt","r",stdin); 225 f(i,0,200){ 226 stringstream ss; 227 string s; 228 getline(cin,s); 229 if(s.length()<=2){ 230 cout<<"-5001,0,0,"<<endl; 231 continue; 232 } 233 //scanf("%d",&vec[i].a); 234 ss.str(s); 235 ss>>vec[i].a; 236 //scanf("%d%d",&vec[i].b,&vec[i].c); 237 ss>>vec[i].b>>vec[i].c; 238 cout<<vec[i].a<<","<<vec[i].b<<","<<vec[i].c<<",\n"; 239 }*/ 240 int T,n; 241 scan(T); 242 f(kk,1,T){ 243 scan(n); 244 if(ans[3*n]==-5001){puts("impossible");} 245 else pf("%d %d %d\n",ans[3*n],ans[3*n+1],ans[3*n+2]); 246 } 247 }
A题数论题。已将结论整理在ACM-数论:一些零碎的数论定理中。
1 #include <bits/stdc++.h> 2 #define ll long long 3 #define scan(i) scanf("%d",&i) 4 #define scanl(i) scanf("%lld",&i) 5 #define scand(i) scanf("%lf",&i) 6 #define pf printf 7 #define f(i,a,b) for(int i=a;i<=b;i++) 8 using namespace std; 9 int T; 10 ll l,r,s; 11 ll cal(ll x){ 12 switch(x%4){ 13 case 0:return x; 14 case 1:return 1; 15 case 2:return x+1; 16 case 3:return 0; 17 } 18 } 19 int main() 20 { 21 scan(T); 22 f(kk,1,T){ 23 scanf("%lld%lld%lld",&l,&r,&s); 24 ll lef=(l+1)/2*2; 25 ll m=(lef+3)%4ll; 26 ll rig=(r-m)/4*4+m; 27 //cout<<lef<<" "<<rig<<endl; 28 if(rig>lef){ 29 ll ans=0; 30 ll ansv=rig-lef+1; 31 //ll zuo=lef-l; 32 //ll you=r-rig; 33 for(ll i=lef;i>=l;i--){ 34 ll ans1=ans; 35 for(ll j=rig;j<=r;j++){ 36 //if(i==lef&&j==rig) continue; 37 if(j!=rig) ans1^=j; 38 if(ans1<=s){ 39 ansv=max(ansv,j-i+1); 40 } 41 } 42 ans^=(i-1); 43 } 44 //cout<<ansv<<endl; 45 pf("%lld\n",ansv); 46 } 47 else{ 48 ll ans=-1; 49 //cout<<s<<endl; 50 for(ll i=l;i<=r;i++){ 51 for(ll j=i;j<=r;j++){ 52 if((cal(i-1)^cal(j))<=s){ 53 ans=max(ans,j-i+1); 54 //cout<<i-1<<" "<<j<<" "<<(cal(i-1)^cal(j))<<" "<<s<<endl; 55 } 56 } 57 } 58 //cout<<ans<<endl; 59 pf("%lld\n",ans); 60 } 61 } 62 return 0; 63 }
M题关于树。我一定要学会数据结构中的树,只靠那一点自欺欺人的数论和图论知识是没有办法独当一面的。只有自己才最靠得住。加油啊。
原文地址:https://www.cnblogs.com/St-Lovaer/p/12002279.html
时间: 2024-11-07 12:30:38