百度之星初赛A轮 hdu 6108 6112 6113

hdu 6108

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 typedef long long ll;
 4
 5 int main(){
 6     int t;
 7     cin>>t;
 8     while(t--){
 9         ll x;
10         scanf("%I64d",&x);
11         ll ans=0;
12         for(int i=1;i*i<=x;i++){
13             if((x-1)%i==0) {
14                 ans+=2;
15                 if(i*i==(x-1)) ans--;
16             }
17         }
18         printf("%I64d\n",ans);
19     }
20 }

hdu 6112

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 typedef long long ll;
 4
 5 char s[30];
 6 int r[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};
 7 int p[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
 8
 9 int hh(int y){
10     if((y%4==0&&y%100!=0)||(y%400==0)) return 1;
11     else return 0;
12 }
13
14 int Change(int year,int month,int day)//根据日期判断出星期几
15 {
16     if(month==1||month==2)
17     {
18         month+=12;
19         year--;
20     }
21     int c=year/100;
22     int y=year%100;
23     int m=month;
24     int d=day;
25     int W=c/4-2*c+y+y/4+26*(m+1)/10+d-1;
26     if(W<0)
27         return (W+(-W/7+1)*7)%7;
28     return W%7;
29 }
30
31 int cc(int y,int m,int d){
32     if(hh(y)){
33         if(r[m]>=d) return 1;
34         else return 0;
35     }
36     else {
37         if(p[m]>=d) return 1;
38         else return 0;
39     }
40 }
41 int main(){
42     int t;
43     cin>>t;
44     while(t--){
45         scanf("%s",s);
46         int y=(s[0]-‘0‘)*1000+(s[1]-‘0‘)*100+(s[2]-‘0‘)*10+(s[3]-‘0‘);
47         int m=(s[5]-‘0‘)*10+(s[6]-‘0‘);
48         int d=(s[8]-‘0‘)*10+(s[9]-‘0‘);
49         int t=0;
50         int day=Change(y,m,d);
51         for(int i=1+y;i<=9999;i++){
52             if(day==Change(i,m,d)&&cc(i,m,d)){
53                 printf("%d\n",i);break;
54             }
55         }
56     }
57 }

hdu 6113

思路:把外围的0的联通快去掉,再判断1的联通快个数,和0的联通快个数

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 const int N=1e5+10;
 4
 5 int fa[N];
 6 char s[102][102];
 7 int n,m;
 8 int b[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
 9 int vis[N],a[N];
10
11 int check(int x,int y){
12     if(x<=0|x>n||y<=0||y>m) return 0;
13     return 1;
14 }
15 int jj(int x,int y)
16 {
17     return (x-1)*m+y;
18 }
19
20 int Find(int x){
21     if(fa[x]==x) return x;
22     return fa[x]=Find(fa[x]);
23 }
24 void hh(int x,int y){
25     int xx=Find(x);
26     int yy=Find(y);
27     if(xx!=yy)
28     fa[xx]=yy;
29 }
30
31 int main(){
32     while(scanf("%d%d",&n,&m)!=EOF){
33     memset(vis,0,sizeof(vis));
34     memset(a,0,sizeof(a));
35     for(int i=1;i<=N;i++) fa[i]=i;
36     for(int i=1;i<=n;i++)
37         scanf("%s",s[i]+1);
38     for(int i=1;i<=n;i++){
39         for(int j=1;j<=m;j++){
40             for(int k=0;k<4;k++){
41                 int xx=i+b[k][0];
42                 int yy=j+b[k][1];
43                 if(check(xx,yy)&&s[i][j]==s[xx][yy]){
44                     hh(jj(i,j),jj(xx,yy));
45                 }
46             }
47         }
48     }
49
50     for(int i=1;i<=n;i++){
51         for(int j=1;j<=m;j++){
52             int zz=Find(jj(i,j));
53             for(int k=0;k<4;k++){
54                 int xx=i+b[k][0];
55                 int yy=j+b[k][1];
56                 if(check(xx,yy)==0)
57                     vis[zz]=1;
58             }
59         }
60     }
61     int on=0,ze=0;
62     for(int i=1;i<=n;i++){
63         for(int j=1;j<=m;j++){
64             if(s[i][j]==‘1‘){
65                 int xx=Find(jj(i,j));
66                 if(!a[xx]) on++;
67                 a[xx]=1;
68             }
69             else {
70                 int xx=Find(jj(i,j));
71                 if(!vis[xx]&&!a[xx]) ze++;
72                 a[xx]=1;
73             }
74         }
75     }
76    // cout<<on<<" "<<ze<<endl;
77     if(on!=1) cout<<-1<<endl;
78     else {
79         if(ze==1) cout<<0<<endl;
80         else if(ze==0) cout<<1<<endl;
81         else cout<<-1<<endl;
82     }
83     }
84 }
时间: 2024-10-22 02:01:13

百度之星初赛A轮 hdu 6108 6112 6113的相关文章

百度之星初赛B轮 hdu 6114 6118 6119

hdu 6114 思路:就是在max(n,m)中取min(n,m)个,(模板收好 1 #include<bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 const int MOD=1e9+7; 5 const int N = 2000 + 5; 6 7 int F[N], Finv[N], inv[N]; 8 void init(){ 9 inv[1] = 1; 10 for(int i = 2; i < N

hdu 4832 百度之星初赛二B

把横的和竖的分开考虑 //#pragma comment(linker, "/STACK:102400000,102400000") #include<iostream> #include<vector> #include<algorithm> #include<cstdio> #include<queue> #include<stack> #include<string> #include<ma

HDU 5701 中位数计数( 2016&quot;百度之星&quot; - 初赛(Astar Round2B) 思维 + 暴力)

传送门 中位数计数 Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 852 Accepted Submission(s): 335 Problem Description 中位数定义为所有值从小到大排序后排在正中间的那个数,如果值有偶数个,通常取最中间的两个数值的平均数作为中位数. 现在有n个数,每个数都是独一无二的,求出每个数在多少个包含

HDU 5698 瞬间移动 (2016&quot;百度之星&quot; - 初赛(Astar Round2B) 1003)

传送门 瞬间移动 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 140 Accepted Submission(s): 66 Problem Description 有一个无限大的矩形,初始时你在左上角(即第一行第一列),每次你都可以选择一个右下方格子,并瞬移过去(如从下图中的红色格子能直接瞬移到蓝色格子),求到第n行第m列的格子有几种方案

2014百度之星初赛(第二场)——Best Financing

2014百度之星初赛(第二场)--Best Financing Problem Description 小A想通过合理投资银行理财产品达到收益最大化.已知小A在未来一段时间中的收入情况,描述为两个长度为n的整数数组dates和earnings,表示在第dates[i]天小A收入earnings[i]元(0<=i<n).银行推出的理财产品均为周期和收益确定的,可描述为长度为m的三个整数数组start.finish和interest_rates, 若购买理财产品i(0<=i<m),需要

2014百度之星初赛(第二场)——JZP Set

2014百度之星初赛(第二场)--JZP Set Problem Description 一个{1, ..., n}的子集S被称为JZP集,当且仅当对于任意S中的两个数x,y,若(x+y)/2为整数,那么(x+y)/2也属于S. 例如,n=3,S={1,3}不是JZP集,因为(1+3)/2=2不属于S.但是{1,2,3}的其他子集都属于S,所以n=3时有7个JZP集 给定n,求JZP集的个数. Input 第一行为T,表示输入数据组数. 每组数据包含一行整数n. 限制条件 1<=T<=10^5

2014百度之星初赛(第二场)——Chess

2014百度之星初赛(第二场)--Chess Problem Description 小度和小良最近又迷上了下棋.棋盘一共有N行M列,我们可以把左上角的格子定为(1,1),右下角的格子定为(N,M).在他们的规则中,"王"在棋盘上的走法遵循十字路线.也就是说,如果"王"当前在(x,y)点,小度在下一步可以移动到(x+1, y), (x-1, y), (x, y+1), (x, y-1), (x+2, y), (x-2, y), (x, y+2), (x, y-2)

2016&quot;百度之星&quot; - 初赛(Astar Round2A)解题报告

此文章可以使用目录功能哟↑(点击上方[+]) 有点智商捉急,第一题卡了好久,看来不服老,不服笨是不行的了...以下是本人目前的题解,有什么疑问欢迎提出 链接→2016"百度之星" - 初赛(Astar Round2A)  Problem 1001 All X Accept: 0    Submit: 0 Time Limit: 2000/1000 mSec(Java/Others)    Memory Limit : 65536 KB  Problem Description F(x,

数学 2015百度之星初赛2 HDOJ 5255 魔法因子

题目传送门 1 /* 2 数学:不会写,学习一下这种解题方式:) 3 思路:设符合条件的数的最高位是h,最低位是l,中间不变的部分为mid,由题意可得到下面的公式(这里对X乘上1e6用a表示,b表示1e6) 4 (h*power+l+mid)*a = (l*power+h+mid)*b 5 可推得:mid = ((h*power+l) * a - (l*power+h) * b) / (a - b); 6 所以可以枚举h,l然后求mid,注意mid的最低位一定是0,因为留出最低位加l或者h 7