contest 1.17
C.最大公约数II
分解因子+欧拉函数
#include <iostream> #include<cstdio> #include<cmath> #include<cstring> #include<algorithm> typedef long long ll; using namespace std; ll ans1,asn2; ll get_phi(ll x){ ll ret=x; for(ll i=2;i*i<=x;i++) if(x%i==0){ ret/=i,ret*=(i-1); while(x%i==0)x/=i; } if(x>1)ret/=x,ret*=x-1; return ret; } int main() { ll n;scanf("%lld",&n); ll i; ll ans1,ans2; for(i=1;i*i<=n;i++){ if(n%i==0){ ans1=i; ans2=get_phi(n/i); printf("%lld %lld\n",ans1,ans2); } } if(sqrt(n)*sqrt(n)==n) i-=2; else i-=1; for(i;i>=1;i--){ if(n%i==0){ ans1=n/i; ans2=get_phi(i); printf("%lld %lld\n",ans1,ans2); } } return 0; }
A.花
dp_0[i]表示长度为i的s[i]与s[i-1]不同且s[i]与s[i+1]相同的无春花串的总数
dp_1[i]表示长度为i的s[i]与s[i-1]不同且s[i]与s[i+1]不同的无春花串的总数
#include <iostream> #include<cstdio> #include<cmath> #include<algorithm> #define mod 1000000007 typedef long long ll; using namespace std; ll dp_0[100005],dp_1[100005]; ll dp[100005]; int main() { ll t;scanf("%lld",&t); while(t--){ ll n,s;scanf("%lld%lld",&n,&s); dp_0[0]=1,dp_1[0]=0;dp[0]=1; dp_0[1]=0,dp_1[1]=s-1;dp[1]=s-1; for(int i=2;i<=n-3;i++){ dp_0[i]=(dp_0[i-2]+dp_1[i-2])%mod*(s-1)%mod; dp_1[i]=(dp_0[i-1]+dp_1[i-1])%mod*(s-1)%mod; dp[i]=(dp_0[i]+dp_1[i])%mod; } ll ans=0; for(ll i=0;i<=n-3;i++){ ans=(ans+dp[i]*dp[n-3-i]%mod*s%mod)%mod; } printf("%lld\n",ans); } return 0; }
暴力
#include <iostream> #include<cstdio> using namespace std; int main() { int a,x; scanf("%d%d",&a,&x); int b,y; scanf("%d%d",&b,&y); int c,z; scanf("%d%d",&c,&z); for(int i=1;i<=100;i++){ if(i%3==1){ if(x+y>b) x-=(b-y),y=b; else y+=x,x=0; } else if(i%3==2){ if(y+z>c) y-=(c-z),z=c; else z+=y,y=0; } else{ if(z+x>a) z-=(a-x),x=a; else x+=z,z=0; } //printf("%d %d %d\n",x,y,z); } printf("%d\n%d\n%d\n",x,y,z); return 0; }
暴力
#include <iostream> #include<algorithm> #include<cstdio> #include<cmath> typedef long long ll; using namespace std; struct Node{ int s,t,b; }node[105]; int vis[1005]; bool cmp(Node a,Node b){ if(a.s!=b.s) return a.s<b.s; else return a.t<b.t; } int main() { int n;scanf("%d",&n); for(int i=1;i<=n;i++){ scanf("%d%d%d",&node[i].s,&node[i].t,&node[i].b); } sort(node+1,node+1+n,cmp); int ans=0; for(int i=1;i<=n;i++){ int s=node[i].s; int t=node[i].t; int b=node[i].b; int cnt=0,k=0; while(cnt<b){ k++; if(vis[k]<=s) { //printf("k=%d vis=%d s=%d\n",k,vis[k],s); cnt++,vis[k]=t; } else continue; } ans=max(ans,k); } printf("%d\n",ans); return 0; }
A.五子棋
暴力
#include <iostream> #include<cstdio> #include<cstring> using namespace std; int Map[20][20]; int dire[8][2]={-1,-1,-1,0,-1,1,0,1,1,1,1,0,1,-1,0,-1}; bool in(int x,int y){ if(x>=1&&x<=15&&y>=1&&y<=15) return 1; return 0; } bool check(int x,int y,int now){ int cnt[9]; for(int i=0;i<8;i++){ cnt[i]=0; int x_=x,y_=y; while(in(x_+dire[i][0],y_+dire[i][1])){ x_=x_+dire[i][0]; y_=y_+dire[i][1]; //printf("%d %d %d %d %d %d\n",x,y,x_,y_,Map[x_][y_],now); if(Map[x_][y_]!=now) break; else cnt[i]++; } } if(cnt[0]+cnt[4]+1>=5) return 1; if(cnt[1]+cnt[5]+1>=5) return 1; if(cnt[2]+cnt[6]+1>=5) return 1; if(cnt[3]+cnt[7]+1>=5) return 1; return 0; } int main() { for(int i=1;i<=15;i++){ for(int j=1;j<=15;j++){ Map[i][j]=-1; } } int n;scanf("%d",&n); int step=0,winner=1; for(int i=1;i<=n;i++){ int x,y;scanf("%d%d",&x,&y); if(step) continue; Map[x][y]=i%2; if(check(x,y,i%2)) step=i,winner=i%2; } if(!step) puts("Tie"); else{ if(winner==1) printf("A "); else printf("B "); printf("%d\n",step); } return 0; }
D.凉宫春日的忧郁
取对数
import java.math.*; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner cin=new Scanner(System.in); int t=cin.nextInt(); for(int i=1;i<=t;i++){ int x=cin.nextInt(); int y=cin.nextInt(); if(y==0) { System.out.println("Yes"); continue; } double tmp=0; for(int j=1;j<=y;j++){ tmp=tmp+(Math.log10(j*1.0)/Math.log10(Math.E)); } tmp=tmp/y; tmp=Math.pow(Math.E, tmp); if(x<=tmp) System.out.println("Yes"); else System.out.println("No"); } } }
暴力
#include <iostream> #include<cstdio> #include<cstring> #include<map> using namespace std; int a[20],b[20]; int copa[20],copb[20]; map<int,int> mp; int main() { for(int i=1;i<=10;i++){ scanf("%d",&a[i]); copa[i]=a[i]; } for(int i=1;i<=10;i++){ scanf("%d",&b[i]); copb[i]=b[i]; } int tot=0,ans=0; for(int i=1;i<=10;i++){ tot-=a[i];b[11]=a[i]; if(i<=9) swap(a[i],a[10]); for(int j=1;j<=11;j++){ tot+=b[j];a[10]=b[j]; if(j<=10) swap(b[j],b[11]); for(int p=1;p<=10;p++){ tot-=a[p];b[11]=a[p]; if(p<=9) swap(a[p],a[10]); for(int q=1;q<=11;q++){ tot+=b[q];a[10]=b[q]; if(q<=10) swap(b[q],b[11]); if(!mp[tot]) { //printf("%d %d %d %d ",i,j,p,q); //printf("tot=%d\n",tot); mp[tot]=1,ans++; } if(q<=10) swap(b[q],b[11]); tot-=b[q]; } if(p<=9) swap(a[p],a[10]); tot+=a[p]; } if(j<=10) swap(b[j],b[11]); tot-=b[j]; } if(i<=9) swap(a[i],a[10]); tot+=a[i]; } printf("%d\n",ans); return 0; }
转载请注明出处:https://www.cnblogs.com/lllxq/