A. Display The Number
题解
题目要求数越大越好,并且有暗示答案会爆longlong,
于是我们就有如下策略:
\(n\) 是偶数全填\(1\) ,因为\(1\) 只占两格,很值得
\(n\) 是奇数的话先狂填\(1\) ,再还剩下\(3\) 个的时候填一个\(7\) 就好了
#include<iostream> #include<algorithm> #include<cmath> #include<cstdio> #include<cstring> #include<cstdlib> #include<queue> using namespace std; #define mem(a,b) memset(a,b,sizeof(a)) typedef long long LL; typedef pair<int,int> PII; #define X first #define Y second inline int read() { int x=0,f=1;char c=getchar(); while(!isdigit(c)){if(c=='-')f=-1;c=getchar();} while(isdigit(c)){x=x*10+c-'0';c=getchar();} return x*f; } int w[10]={6,2,5,5,4,5,6,3,7,6}; int T,n; int main() { T=read(); while(T--) { n=read(); if(n%2==0) for(int i=1;i<=n/2;i++)printf("1"); else { printf("7"); for(int i=1;i<n/2;i++)printf("1"); } printf("\n"); } return 0; }
B. Infinite Prefixes
题解
破题卡了好久,觉得语言难以描述怎么解
#include<iostream> #include<algorithm> #include<cmath> #include<cstdio> #include<cstring> #include<cstdlib> #include<queue> using namespace std; #define mem(a,b) memset(a,b,sizeof(a)) typedef long long LL; typedef pair<int,int> PII; #define X first #define Y second inline int read() { int x=0,f=1;char c=getchar(); while(!isdigit(c)){if(c=='-')f=-1;c=getchar();} while(isdigit(c)){x=x*10+c-'0';c=getchar();} return x*f; } const int maxn=100010; int T,n,x,p0[maxn],p1[maxn],pre[maxn],MAX; char s[maxn]; int main() { T=read(); while(T--) { mem(p0,0);mem(p1,0);mem(pre,0); n=read();x=read(); int cnt=0; scanf("%s",s+1); for(int i=1;i<=n;i++)p0[i]=p0[i-1]+(s[i]=='0'),p1[i]=p1[i-1]+(s[i]=='1'),pre[i]=p0[i]-p1[i]; if(x==0)cnt=1; if(pre[n]) { for(int i=1;i<=n;i++)if((x-pre[i])%pre[n]==0 && (x-pre[i])/pre[n]>=0)cnt++; } else { for(int i=0;i<=n;i++)if(x==pre[i])cnt++; } if(!pre[n] && cnt)printf("-1\n"); else printf("%d\n",cnt); } return 0; }
C. Obtain The String
题解
特别像字符串匹配
但是我没这么做,对模板串预处理,省得匹配串耽误时间。
设\(pre[i]\) 表示字母\(i\) 的最早出现位置,\(suf[i][j]\) 表示表示在第\(i\) 位字符后,字母\(j\) 最早出现位置,这个可以用\(O(26n)\) 预处理出来
然后就直接在上面左右反复横跳就可以了
#include<iostream> #include<algorithm> #include<cmath> #include<cstdio> #include<cstring> #include<cstdlib> #include<queue> using namespace std; #define mem(a,b) memset(a,b,sizeof(a)) typedef long long LL; typedef pair<int,int> PII; #define X first #define Y second inline int read() { int x=0,f=1;char c=getchar(); while(!isdigit(c)){if(c=='-')f=-1;c=getchar();} while(isdigit(c)){x=x*10+c-'0';c=getchar();} return x*f; } const int maxl=100010; int T; char s[maxl],t[maxl]; int pre[30],suf[maxl][30];//pre(i)表示字符i最早出现位置 ,suf(i,j)表示在i字符后,字符j最早出现位置 int main() { T=read(); while(T--) { mem(pre,42);mem(suf,42); scanf("%s%s",s,t); int l1=strlen(s),l2=strlen(t),cnt=0,ok=0; for(int i=0;i<l1;i++)pre[s[i]-'a']=min(pre[s[i]-'a'],i); for(int i=0;i<l1-1;i++)suf[i][s[i+1]-'a']=i+1; for(int i=l1-1;i>=0;i--) for(int j=0;j<26;j++)suf[i][j]=min(suf[i][j],suf[i+1][j]); for(int i=0;i<l2;) { ++cnt; int pos=pre[t[i]-'a'];i++; if(pos>=l1){ok=1;break;} while(suf[pos][t[i]-'a']<l1)pos=suf[pos][t[i]-'a'],i++; } if(!ok)printf("%d\n",cnt); else printf("%d\n",-1); } return 0; }
D. Same GCDs
题解
傻子数论题,明天早上再补题解
#include<iostream> #include<algorithm> #include<cmath> #include<cstdio> #include<cstring> #include<cstdlib> #include<queue> using namespace std; #define mem(a,b) memset(a,b,sizeof(a)) typedef long long LL; typedef pair<int,int> PII; #define X first #define Y second inline LL read() { LL x=0,f=1;char c=getchar(); while(!isdigit(c)){if(c=='-')f=-1;c=getchar();} while(isdigit(c)){x=x*10+c-'0';c=getchar();} return x*f; } int T; LL a,m,x,k1,k2; LL gcd(LL a,LL b){return b==0 ? a : gcd(b,a%b);} #include<vector> vector<LL> pme; LL count_prime(LL x,LL n){ pme.clear(); LL i,j; for(i=2;i*i<=n;i++) if(n%i==0){ pme.push_back(i); while(n%i==0)n/=i; } if(n>1)pme.push_back(n); LL sum=0,value,cnt; for(i=1;i<(1<<pme.size());i++){ value=1; cnt=0; for(j=0;j<pme.size();j++){ if(i&(1<<j)){ value*=pme[j]; cnt++; } } if(cnt&1) sum+=x/value; else sum-=x/value; } return x-sum; } int main() { T=(int)read(); while(T--) { a=read();m=read(); x=gcd(a,m); k1=a/x;k2=m/x; cout<<count_prime(k2+k1-1,k2)-count_prime(k1-1,k2)<<endl; } return 0; }
废话
脑子还是不好使,处理问题速度太慢啊
来源:https://www.cnblogs.com/FYH-SSGSS/p/12241935.html