三道大水題,其它題都不會做,真是尷尬和無奈啊……
有想法,但是解決不了,感覺個人不會一些基本解法,終究還是個人學習的內容太少了
B. Goldbach
/* 數值較小,<2^63,分解的兩個素數較小,其中一個小於xxx(etc. 1e5) 生成1~x的素數:O(n) 判斷素數不能只用已求出的素數相除,這樣結果不對。而且這個方法速度太慢。 Code largely studys from https://paste.ubuntu.com/p/JmDk43TTPB/ 米勒拉賓素數測試 https://www.cnblogs.com/cons/p/5188910.html 用unsigned long long 不明覺厲…… */ #include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <list> #include <stack> #include <vector> #include <set> #include <map> #include <queue> #include <algorithm> #include <iostream> using namespace std; #define ll unsigned long long const long maxn=1e6; //const ll mod=1e9+7; bool vis[maxn]; long sum=0; ll zhi[maxn]; //由於考慮到取模數很大 快速冪會溢出 ll add_mod(ll a,ll b,ll mod) //a*b = a*x1 + a*x2 + … { ll ans=0; while (b) { if (b & 1) ans=(ans+a)%mod; a=(a<<1)%mod; b>>=1; } return ans; } ll pow_mod(ll a,ll b,ll mod) //a^b =a^(b/2)*a^(b/2) *a(if b%2==1) { if (b>1) { ll tmp=pow_mod(a,b>>1,mod); tmp=add_mod(tmp,tmp,mod); if (b & 1) tmp=add_mod(tmp,a,mod); return tmp; } return a; // ll r=1; // while (b) // { // if (b & 1) // r=r*a%mod; // a=a*a%mod; // b>>=1; // } // return r; } bool Miller_Rabbin(ll s,ll chu) { long ci=0,i; ll d=s-1; //ll while (!(d & 1)) //除成奇數 { d>>=1; ci++; } ll k=pow_mod(chu,d,s); if (k==1) //第一個為奇數 return 1; for (i=0;i<ci;i++,k=k*k%s) if (k==s-1) //以后的為偶數 return 1; return 0; } bool pan(ll s) { long i,g=5; ll chu[]={2,3,5,7,11}; for (i=0;i<g;i++) if (s==chu[i]) return 1; for (i=0;i<g;i++) if (s%chu[i]==0) return 0; for (i=0;i<g;i++) if (!Miller_Rabbin(s,chu[i])) return 0; return 1; // if (s<maxn) // return vis[s]; // else // { // long i; // for (i=1;i<=ans;i++) // if (s%zhi[i]==0) // return false; // return true; // } } int main() { long i,j,t; ll n; for (i=1;i<maxn;i++) vis[i]=true; for (i=2;i<maxn;i++) { if (vis[i]) { sum++; zhi[sum]=i; } for (j=1;j<=sum;j++) { if (i*zhi[j]>=maxn) break; vis[i*zhi[j]]=false; if (i%zhi[j]==0) break; } } scanf("%ld",&t); while (t--) { scanf("%llu",&n); for (i=1;i<=sum;i++) if (pan(n-zhi[i])) { printf("%llu %llu\n",zhi[i],n-zhi[i]); break; } } return 0; } /* 126 146 22222222222 */
E. Copy and Submit II
運行題目程序一遍就知道了
內存超限(沒刪原程序的a數組) -> 編譯錯誤(只刪了原程序的a數組,沒刪其它a變量) -> 運行超時(按照題目的代碼用cin) -> 運行超時(scanf沒用EOF) -> 正確通過
滿滿的淚水………………………………………………………………………………………………………………………………………………………………………
#include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <list> #include <stack> #include <vector> #include <set> #include <map> #include <queue> #include <algorithm> #include <iostream> using namespace std; #define ll long long const long maxn=1e6+5; const ll mod=1e9+7; int main() { int n,i; long long r,a; while (scanf("%ld",&n)!=EOF) { r=1; for (i=0;i<n;i++) { scanf("%lld",&a); r=r*(a+1)%mod; } printf("%lld\n",r); } return 0; }
I. Reversion Count
1 //找個樣例從頭到尾調試一次,查看變量 2 #include <cstdio> 3 #include <cstdlib> 4 #include <cstring> 5 #include <cmath> 6 #include <list> 7 #include <stack> 8 #include <vector> 9 #include <set> 10 #include <map> 11 #include <queue> 12 #include <algorithm> 13 #include <iostream> 14 using namespace std; 15 #define ll long long 16 const long maxn=1e6+5; 17 const ll mod=1e9+7; 18 19 long a[105],b[105],n; 20 21 bool pan() 22 { 23 long i; 24 //從高位到低位,之前寫錯了 ,其實無關緊要,結果能被9整除 25 for (i=n;i>=1;i--) 26 if (a[i]>b[i]) 27 return true; 28 else if (a[i]<b[i]) 29 return false; 30 return false; 31 } 32 33 int main() 34 { 35 long i,t,x; 36 char s[105]; 37 // while (scanf("%s",s)!=EOF) 38 while (cin>>s) 39 { 40 n=strlen(s); 41 for (i=1;i<=n;i++) 42 a[i]=s[n-i]-48; 43 for (i=1;i<=n;i++) 44 b[i]=a[n+1-i]; 45 if (!pan()) 46 { 47 for (i=1;i<=n;i++) 48 { 49 t=a[i]; 50 a[i]=b[i]; 51 b[i]=t; 52 } 53 } 54 for (i=1;i<=n;i++) 55 { 56 a[i]-=b[i]; 57 if (a[i]<0) 58 { 59 a[i+1]--; 60 a[i]+=10; 61 } 62 } 63 x=0; 64 for (i=n;i>=1;i--) 65 { 66 x=x*10+a[i]; 67 a[i]=x/9; 68 x=x%9; 69 } 70 while (n>1 && a[n]==0) 71 n--; 72 //只使用一位數字,之前寫錯了 73 while (n>1 && a[n]==a[n-1]) 74 n--; 75 if (n==1) 76 printf("YES\n"); 77 else 78 printf("NO\n"); 79 } 80 return 0; 81 }
L. Nise-Anti-AK Problem
1 #include <cstdio> 2 #include <cstdlib> 3 #include <cstring> 4 #include <cmath> 5 #include <list> 6 #include <stack> 7 #include <vector> 8 #include <set> 9 #include <map> 10 #include <queue> 11 #include <algorithm> 12 #include <iostream> 13 using namespace std; 14 #define ll long long 15 const long maxn=1e6+5; 16 const ll mod=1e9+7; 17 18 long a[1005]; 19 20 int main() 21 { 22 long t,n,i; 23 // for (i=1;i<=100;i++) 24 // { 25 // long sum=0; 26 // for (int j=0;j<=i;j++) 27 // sum+= (i | j); 28 // printf("%ld\n",sum); 29 // } 30 31 scanf("%ld",&t); 32 while (t--) 33 { 34 scanf("%ld",&n); 35 for (i=1;i<=n;i++) 36 scanf("%ld",&a[i]); 37 sort(a+1,a+n+1); 38 printf("%ld\n",a[n]); 39 } 40 return 0; 41 }
