标签:比赛
XTU1168 Alice and Bob
因为数据只有10000范围,直接递推就可以了
#include<stdio.h> #include<string.h> #include<vector> #include<list> #include<deque> #include<queue> #include<stack> #include<map> #include<set> #include<bitset> #include<algorithm> #include<math.h> using namespace std; #define out(x) cout<<#x<<": "<<x<<endl const double eps(1e-8); const int maxn=10100; const long long inf=-1u>>1; typedef long long ll; int dp[maxn][2]; int n; void init(){ scanf("%d",&n); for(int i=1;i<=n;i++){ dp[i][0]=inf; dp[i][1]=inf; } dp[1][0]=dp[1][1]=1; } int main() { #ifndef ONLINE_JUDGE freopen("in.txt","r",stdin); #endif int t; scanf("%d",&t); while(t--){ init(); for(int i=2;i<=n;i++){ //printf("%d\n",i); for(int j=0;(1<<j)<=i;j++){ dp[i][0]=min(dp[i][0],dp[i-(1<<j)][1]+1); } for(int j=1;j<=i;j*=3){ dp[i][1]=min(dp[i][1],dp[i-j][0]+1); } } printf("%d\n",dp[n][0]); } return 0; }XTU1173 Five Tiger
恶心的模拟题
#include<stdio.h> #include<string.h> #include<vector> #include<list> #include<deque> #include<queue> #include<stack> #include<map> #include<set> #include<bitset> #include<algorithm> #include<math.h> using namespace std; #define out(x) cout<<#x<<": "<<x<<endl const double eps(1e-8); const int maxn=10100; const long long inf=-1u>>1; typedef long long ll; char ss[10][10]; int s[10][10]; void init() { for(int i=1;i<=5;i++) scanf("%s",ss[i]+1); for(int i=1;i<=5;i++) { for(int j=1;j<=5;j++){ if(ss[i][j]=='x') s[i][j]=1; else s[i][j]=2; } } } int xiaohu(int i,int j,int c){ if (s[i-1][j-1]==c&&s[i-1][j+1]==c&&s[i+1][j-1]==c&&s[i+1][j+1]==c&&s[i][j]==c) return 5; else return 0; } int xiaodou(int i,int j,int c){ if(s[i][j]==c&&s[i][j+1]==c&&s[i+1][j]==c&&s[i+1][j+1]==c) return 1; else return 0; } int work(int c) { int ans=0; if(s[1][1]==c&&s[1][5]==c&&s[3][3]==c&&s[5][1]==c&&s[5][5]==c) ans+=10;//大虎 for(int i=1;i<=5;i++){ int flag=1; for(int j=1;j<=5;j++){ if(s[i][j]!=c) flag=0; } if(flag) ans+=5; flag=1; for(int j=1;j<=5;j++){ if(s[j][i]!=c) flag=0; } if(flag) ans+=5; } if(s[1][1]==c&&s[2][2]==c&&s[3][3]==c&&s[4][4]==c&&s[5][5]==c) ans+=5; if(s[5][1]==c&&s[4][2]==c&&s[3][3]==c&&s[2][4]==c&&s[1][5]==c) ans+=5; //四斜 if(s[4][1]==c&&s[3][2]==c&&s[2][3]==c&&s[1][4]==c) ans+=4; if(s[2][1]==c&&s[3][2]==c&&s[4][3]==c&&s[5][4]==c) ans+=4; if(s[5][2]==c&&s[4][3]==c&&s[3][4]==c&&s[2][5]==c) ans+=4; if(s[1][2]==c&&s[2][3]==c&&s[3][4]==c&&s[4][5]==c) ans+=4; //三斜 if(s[3][1]==c&&s[2][2]==c&&s[1][3]==c) ans+=3; if(s[3][1]==c&&s[4][2]==c&&s[5][3]==c) ans+=3; if(s[3][5]==c&&s[4][4]==c&&s[5][3]==c) ans+=3; if(s[1][3]==c&&s[2][4]==c&&s[3][5]==c) ans+=3; for(int i=1;i<=5;i++){ for(int j=1;j<=5;j++){ if(2<=i&&i<=4&&2<=j&&j<=4) ans+=xiaohu(i,j,c); if(1<=i&&i<=4&&1<=j&&j<=4) ans+=xiaodou(i,j,c); } } return ans; } int main() { #ifndef ONLINE_JUDGE freopen("in.txt","r",stdin); #endif int t; scanf("%d",&t); while(t--){ init(); printf("%d %d\n",work(1),work(2)); } return 0; }XTU1175 Hurry Up
//三分法,用于抛物线极值 #include<stdio.h> #include<string.h> #include<vector> #include<list> #include<deque> #include<queue> #include<stack> #include<map> #include<set> #include<bitset> #include<algorithm> #include<math.h> using namespace std; #define out(x) cout<<#x<<": "<<x<<endl const double eps(1e-8); const int maxn=10100; const long long inf=-1u>>1; typedef long long ll; struct Point { double x,y; Point (){ } Point(double xx,double yy){ x=xx;y=yy; } }a,b; double va,vb; double dist(Point a,Point b){ return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y)); } void init() { scanf("%lf%lf%lf%lf",&a.x,&a.y,&b.x,&b.y); scanf("%lf%lf",&va,&vb); } double cal(double x){ Point mid=Point(x,0); return dist(a,mid)/va+dist(mid,b)/vb; } void work() { double ha,hb; double ans; ans=dist(a,b)/va; double left=a.x,right=b.x,mid1,mid2; if(left>right) swap(left,right); while(left+eps<right){ mid1=(left+right)/2.0; mid2=(mid1+right)/2.0; if(cal(mid1)<cal(mid2)) right=mid2; else left=mid1; } ans=min(ans,cal(left)); printf("%.2f\n",ans); } int main() { #ifndef ONLINE_JUDGE freopen("in.txt","r",stdin); #endif int t; scanf("%d",&t); while(t--){ init(); work(); } return 0; }
又是恶心的模拟题,而且很奇葩的是地雷炸掉之后不算同归于尽。。。。
#include<stdio.h> #include<string.h> #include<vector> #include<list> #include<deque> #include<queue> #include<stack> #include<map> #include<set> #include<bitset> #include<algorithm> #include<math.h> using namespace std; #define out(x) cout<<#x<<": "<<x<<endl const double eps(1e-8); const int maxn=10100; const long long inf=-1u>>1; typedef long long ll; char s1[10],s2[10]; int a,b; void init() { a=s1[0]-'0'; b=s2[0]-'0'; if(s1[0]=='M') a=10; if(s2[0]=='M') b=10; if(s1[0]=='B') a=11; if(s2[0]=='B') b=11; if(s1[0]=='F') a=12; if(s2[0]=='F') b=12; } void work() { int ans; if(a==10 || a==12) ans=2; else if(b==12) ans=3; else if(a==b||a==11||b==11) ans=0; else if(a==9&&b==10) ans=1; else if(b==10) ans=-1; else if(a<b) ans=1; else ans=-1; if(ans<2) printf("%d\n",ans); else if(ans==2) printf("Error\n"); else printf("Bingo\n"); } int main() { #ifndef ONLINE_JUDGE freopen("in.txt","r",stdin); #endif int a,b; while(scanf("%s%s",s1,s2)!=EOF) { init(); work(); } return 0; }
a<=b时特判
a>b时,随着z的增大,a/b的值会越来越小,于是a/b取下整,即为a/b能到达的整数,然后为什么比a/b小的整数为什么不需要判断,我也不知道,直接猜的
#include<stdio.h> #include<string.h> #include<vector> #include<list> #include<deque> #include<queue> #include<stack> #include<map> #include<set> #include<bitset> #include<algorithm> #include<math.h> using namespace std; #define out(x) cout<<#x<<": "<<x<<endl const double eps(1e-8); const int maxn=10100; const long long inf=-1u>>1; typedef long long ll; int a,b; void init() { scanf("%d%d",&a,&b); } void work() { int flag; if(a<b) flag=0; else if(a==b) flag=1; else { int k=a/b; if(k==1) flag=0; else { if((a-k*b)%(k-1)==0) { flag=1; } else flag=0; } } if(flag) printf("Yes\n"); else printf("No\n"); } int main() { #ifndef ONLINE_JUDGE //freopen("in.txt","r",stdin); #endif int t; scanf("%d",&t); while(t--){ init(); work(); } return 0; }
标签:比赛
原文地址:http://blog.csdn.net/lj94093/article/details/46352353