1874: 蛤玮学计网
Time Limit: 1 Sec Memory Limit: 128 MB
Submit: 854 Solved: 120
Description
蛤玮最近学习了关于ip的知识,于是他迫不及待的想把新知识传授给她的妹子.蛤玮的妹子随便写下了一个字符串,蛤玮现在要告诉她这个字符串是不是一个合法的ip地址.
为简单考虑,仅考虑ipv4的情况,即合法ip为形同"a1.a2.a3.a4",且0<=ai<=255。
Input
第一行为一个整数T(1<=T<=20),代表数据组数。接下来T行每行一个字符串,其中不包含空格,Tab以及回车,长度不超过50。
Output
若合法,输出"Yes",否则输出"No"(不包含引号)。
Sample Input
2
10.105.240.51
f.a.t.e
Sample Output
Yes
No
HINT
我们认为010.105.240.051是合法的。
#include<stdio.h> #include<string.h> #include<math.h> #include<algorithm> #include<iostream> using namespace std; char s[110]; int main() { int t,i,k,l; scanf("%d",&t); while(t--) { scanf("%s",s); l=strlen(s); int flag=0,cnt=0,d=0,n;//cnt表示数的个数,d表示点的个数 for(i=0;i<l;) { if(s[i]=='.') { d++;i++; continue; } if(s[i]<'0'||s[i]>'9') { flag=1; break; } else { n=0;k=0; while(isdigit(s[i])) n=n*10+(s[i++]-'0'),k++; cnt++; if(k>3||n>255)//如果某个数的位数大于3或者数的值大于255,则不符合题意 { flag=1; break; } } } if(cnt!=4||flag||d>3)//如果数的个数不为4,出现字母,或者点的个数大于3,则不符合要求 printf("No\n"); else printf("Yes\n"); } return 0; }
1875: 蛤玮的财宝
Time Limit: 1 Sec Memory Limit: 128 MB
Submit: 239 Solved: 34
Description
蛤玮和他的妹子出海游玩,不小心遭遇了海难,他们醒来之后发现自己到了一座金银岛.岛主非常好心的告诉他们在岛的另一边有船可以送他们回家.
这座岛可以看成n*m的矩阵,蛤玮他们在位置(1,1),而船在位置(n,m).蛤玮发现金银岛遍地都是金子,每个格子里有价值a[i,j]的金子,他和妹子打算在回去的路上带一些走.如果他们路过了位置(i,j),就可以假装系鞋带捡走地上的金子.为了不引起怀疑,他们在走的时候只能往接近码头的方向走,即如果蛤玮现在在(i,j),他只能移动到(i+1,j)或者(i,j+1).为了能拿走更多的金子,蛤玮和妹子决定装作互相不认识,这样他们就可以分开走,从而拿到更多的金子.
蛤玮和他妹子想知道他们最多能拿走多少金子.
注意如果蛤玮和他妹子经过了相同的地方,只能得到一次金子,因为地上的捡完就没有了.
Input
T(1<=T<=10),表示数据组数.
每组数据第一行n,m(1<=n,m<=100),接下来n行,每行m个数,第i行第j列的值a[i,j](1<=a[i,j]<=1000)表示位置(i,j)的金子的价值.
Output
每组数据输出一行,蛤玮和他妹子能拿到的金子总价的最大值.
Sample Input
1
2 2
2 1
1 2
Sample Output
6
#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; int v[110][110]; int f[210][110][110]; int main() { int t,n,m,T,c; int i,j,k; scanf("%d",&T); while(T--) { memset(v,0,sizeof(v)); memset(f,0,sizeof(f)); scanf("%d%d",&m,&n); c=m+n-2; for(i=1;i<=m;i++) for(j=1;j<=n;j++) scanf("%d",&v[i][j]); for(k=1;k<c;k++) { t=k+2>m?m:k+2; for(i=1;i<=t;i++) for(j=i+1;j<=t;j++) if(i!=j) f[k][i][j]=max(max(f[k-1][i-1][j],f[k-1][i][j-1]),max(f[k-1][i][j],f[k-1][i-1][j-1]))+v[i][k-i+2]+v[j][k-j+2]; } f[c][m][m]=max(f[c-1][m-1][m],f[c-1][m][m-1]); f[c][m][m]+=v[1][1]+v[m][n]; printf("%d\n",f[c][m][m]); } return 0; }
1878: 蛤玮准备礼物
Time Limit: 1 Sec Memory Limit: 128 MB
Submit: 680 Solved: 94
Description
蛤玮的妹子要过生日了,经过千挑万选,蛤玮决定给妹子买一盒水彩铅笔,然而卖多少个才合适呢.机智的蛤玮决定数一数今天是妹子出生的第多少天,然后就买那么多根铅笔.
给出蛤玮妹子的生日和今天的日期,求蛤玮一共需要买多少.
注意:生日当天算第0天.
Input
T(1<=T<=1000),表示数据组数.
每组数据一行y1,m1,d1,y2,m2,d2,其中y1,m1,d1表示妹子生日的年月日,y2,m2,d2表示蛤玮所在时空的当前天的年月日.
(1900<=y<=1000000, 1<=m<=12, 1<=d<=当月应有天数).输入保证当前天在妹子生日之后.
Output
每组数据输出一行,蛤玮要买多少根铅笔.
Sample Input
21995 10 24 1995 10 251996 1 9 1996 3 7
Sample Output
158
1878: 蛤玮准备礼物
Time Limit: 1 Sec Memory Limit: 128 MB
Submit: 680 Solved: 94
Description
蛤玮的妹子要过生日了,经过千挑万选,蛤玮决定给妹子买一盒水彩铅笔,然而卖多少个才合适呢.机智的蛤玮决定数一数今天是妹子出生的第多少天,然后就买那么多根铅笔.
给出蛤玮妹子的生日和今天的日期,求蛤玮一共需要买多少.
注意:生日当天算第0天.
Input
T(1<=T<=1000),表示数据组数.
每组数据一行y1,m1,d1,y2,m2,d2,其中y1,m1,d1表示妹子生日的年月日,y2,m2,d2表示蛤玮所在时空的当前天的年月日.
(1900<=y<=1000000, 1<=m<=12, 1<=d<=当月应有天数).输入保证当前天在妹子生日之后.
Output
每组数据输出一行,蛤玮要买多少根铅笔.
Sample Input
2
1995 10 24 1995 10 25
1996 1 9 1996 3 7
Sample Output
1
58
#include<stdio.h> #include<string.h> #include<algorithm> #include<math.h> using namespace std; int a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; int b[13]={0,31,29,31,30,31,30,31,31,30,31,30,31}; int sum[1000010]; int init() { for(int i=1900;i<=1000000;i++) { if(i%4==0&&i%100!=0||i%400==0) sum[i]=sum[i-1]+366; else sum[i]+=sum[i-1]+365; } } int main() { init(); int t,y,m,d,y1,m1,d1,k,i; scanf("%d",&t); while(t--) { scanf("%d%d%d%d%d%d",&y,&m,&d,&y1,&m1,&d1); int s=0; for(i=0;i<m;i++) { if(y%4==0&&y%100!=0||y%400==0) s+=b[i]; else s+=a[i]; } s+=d; if(y%4==0&&y%100!=0||y%400==0) k=366-s; else k=365-s; k+=sum[y1]-sum[y]; for(i=0;i<m1;i++) { if(y1%4==0&&y1%100!=0||y1%400==0) k+=b[i]; else k+=a[i]; } k+=d1; if(y1%4==0&&y1%100!=0||y1%400==0) k-=366; else k-=365; printf("%d\n",k); } return 0; }
1879: 蛤玮买好了礼物
Time Limit: 1 Sec Memory Limit: 128 MB
Submit: 399 Solved: 150
Description
蛤玮的妹子过生日,蛤玮把千辛万苦挑选出来的礼物送到了妹子面前,然而妹子非常生气,因为妹子要的是化妆套装,而蛤玮买了一套水彩铅笔,更可气的是这些铅笔像是二手的,因为他们不是一样长!
为了惩罚蛤玮,妹子说"我有强迫症,受不了这些铅笔不一样长,你快去搞定它!不然就买化妆套给我!".
还好,这些铅笔的长度都是整数,蛤玮灵机一动,可以把些铅笔掰断使得它们可以一样长,当然要保证铅笔尽可能的长。 那么当这些铅笔最终一样长的时候,一共有多少支铅笔?
Input
T(1<=T<=100),表示数据组数.
每组数据第一行一个整数n(1<=n<=100),表示蛤玮买来的铅笔个数,接下来一行n个整数,表示n个铅笔的长度.保证长度都为正整数且小于1e7.
Output
每组数据输出一行,表示最终的铅笔个数.
Sample Input
222 334 6 14
Sample Output
512
HINT
对于第一个输入,最终掰成了5个长度为1的铅笔,第二个输入,最终掰成了12个长度为2的铅笔。
1879: 蛤玮买好了礼物
Time Limit: 1 Sec Memory Limit: 128 MB
Submit: 399 Solved: 150
Description
蛤玮的妹子过生日,蛤玮把千辛万苦挑选出来的礼物送到了妹子面前,然而妹子非常生气,因为妹子要的是化妆套装,而蛤玮买了一套水彩铅笔,更可气的是这些铅笔像是二手的,因为他们不是一样长!
为了惩罚蛤玮,妹子说"我有强迫症,受不了这些铅笔不一样长,你快去搞定它!不然就买化妆套给我!".
还好,这些铅笔的长度都是整数,蛤玮灵机一动,可以把些铅笔掰断使得它们可以一样长,当然要保证铅笔尽可能的长。 那么当这些铅笔最终一样长的时候,一共有多少支铅笔?
Input
T(1<=T<=100),表示数据组数.
每组数据第一行一个整数n(1<=n<=100),表示蛤玮买来的铅笔个数,接下来一行n个整数,表示n个铅笔的长度.保证长度都为正整数且小于1e7.
Output
每组数据输出一行,表示最终的铅笔个数.
Sample Input
2
2
2 3
3
4 6 14
Sample Output
5
12
HINT
对于第一个输入,最终掰成了5个长度为1的铅笔,第二个输入,最终掰成了12个长度为2的铅笔。
#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; int a[110]; int gcd(int a,int b) { return b?gcd(b,a%b):a; } int main() { int t,n,i; scanf("%d",&t); while(t--) { int sum=0; scanf("%d",&n); for(i=0;i<n;i++) { scanf("%d",&a[i]); sum+=a[i]; } sort(a,a+n); int k=a[0]; for(i=1;i<n;i++) k=min(k,gcd(k,a[i])); sum/=k; printf("%d\n",sum); } return 0; }
1881: 蛤玮的机房
Time Limit: 1 Sec Memory Limit: 128 MB
Submit: 287 Solved: 101
Description
蛤玮成为了实验室主任,现在学校要求他建好一个机房里的通信网络.这个网络中有n台主机,现在已知建设好了m条线路,可以让一些主机直接或间接通信,为了使这n台主机互相之间都可以直接或间接通信,请问蛤玮最少还需建设多少条线路。
间接通信指:若A,B可以直接通信,B,C可以直接通信,则A,C可以间接通信,同理若C,D可以直接通信,A,D也可以间接通信。
Input
输入第一行为一个整数T(1<=T<=10),代表数据组数。对于每组数据,第一行为两个整数n(1<=n<=100),m(1<=m<=n*n),接下来m行每行两个整数u,v(1<=u,v<=n),表示主机u,v之间已建立线路。
Output
对于每组数据,输出一个整数,表示还需建设的线路数。
Sample Input
1
3 3
1 1
2 1
1 2
Sample Output
1
#include<stdio.h> #include<string.h> #include<math.h> #include<algorithm> using namespace std; int a[110]; int find(int x) { return x==a[x]?x:a[x]=find(a[x]); } int judge(int x,int y) { int fx=find(x); int fy=find(y); if(fx!=fy) a[fy]=fx; } int main() { int t,n,m; int i,j,k,u,v; scanf("%d",&t); while(t--) { scanf("%d%d",&n,&m); for(i=1;i<=n;i++) a[i]=i; for(i=1;i<=m;i++) { scanf("%d%d",&u,&v); judge(u,v); } int cnt=0; for(i=1;i<=n;i++) if(a[i]==i) cnt++; printf("%d\n",cnt-1); } return 0; }
1882: 蛤玮的魔法
Time Limit: 1 Sec Memory Limit: 128 MB
Submit: 225 Solved: 61
Description
为了成为魔法少女,蛤玮正在学习画魔法阵,他首先画了一个正n边形,查阅魔法书后蛤玮发现书上要求魔法阵的面积不能超过L,他很头疼,因为用尺规作这个正n边形花了他好大经历,他不想重新画一边,于是他想了个好主意,把每条边的中点依次连起来,就能得到一个缩小的正n边行.现在蛤玮想知道他需要按着个方法缩小多少次才能合乎魔法书上的要求.
Input
T(1<=T<=100),表示数据组数.
每组数据三个整数n(3<=n<=10),a(1<=a<=100),L(1<=L<=1000),其中a表示蛤玮画的正n边行的边长,n,L如题中描述.
数据保证[L-1e-5,L+1e-5]内答案唯一.
Output
每组数据输出一个整数,表示蛤玮操作的次数.
Sample Input
14 2 3
Sample Output
1
1882: 蛤玮的魔法
Time Limit: 1 Sec Memory Limit: 128 MB
Submit: 225 Solved: 61
Description
为了成为魔法少女,蛤玮正在学习画魔法阵,他首先画了一个正n边形,查阅魔法书后蛤玮发现书上要求魔法阵的面积不能超过L,他很头疼,因为用尺规作这个正n边形花了他好大经历,他不想重新画一边,于是他想了个好主意,把每条边的中点依次连起来,就能得到一个缩小的正n边行.现在蛤玮想知道他需要按着个方法缩小多少次才能合乎魔法书上的要求.
Input
T(1<=T<=100),表示数据组数.
每组数据三个整数n(3<=n<=10),a(1<=a<=100),L(1<=L<=1000),其中a表示蛤玮画的正n边行的边长,n,L如题中描述.
数据保证[L-1e-5,L+1e-5]内答案唯一.
Output
每组数据输出一个整数,表示蛤玮操作的次数.
Sample Input
1
4 2 3
Sample Output
1
#include<stdio.h> #include<string.h> #include<math.h> #include<algorithm> #define PI acos(-1.0) using namespace std; int main() { int t; double n,a,l; double s,s1,a1,l1; double x1,x2,x3,x4; scanf("%d",&t); while(t--) { scanf("%lf%lf%lf",&n,&a,&l); x1=(PI/n)*2; x2=(PI-x1)/2; x3=2*x2; x4=(PI-x3)/2; l1=a*sin(x2)/sin(x1); s=0.5*sin(x1)*l1*l1*n; int cnt=0; while(s-l>1e-6) { a1=a/2; s1=0.5*sin(x3)*a1*a1; a=a1*sin(x3)/sin(x4); s-=n*s1; cnt++; } printf("%d\n",cnt); } return 0; }
1883: 蛤玮当上主席
Time Limit: 1 Sec Memory Limit: 128 MB
Submit: 249 Solved: 181
Description
蛤玮一直很想当主席,掌管自己的国家.对于一个富强的国家,拥有属于自己的货币是非常重要的.我们假设蛤玮的国家的货币在流通中只会以自然数的形式出现,即不会出现1.1蛤这样的情况.蛤玮需要发布一定面额的纸币,使得任意的钱数都可以用一定的纸币组成.蛤玮自己想了几种方案,然而他并不懂经济,不知道这些方案能不能满足要求.
Input
T(1<=T<=100),表示数据组数.
每组数据第一行n(1<=n<=10),表示发行几种货币,接下来一行包含n个正整数ai(1<=ai<=100),保证给出的n个数从左至右严格递增.
Output
如果蛤玮的方案能够表示任意的钱数,则输出"Yes",否则输出"No".
Sample Input
131 2 3
Sample Output
Yes
1883: 蛤玮当上主席
Time Limit: 1 Sec Memory Limit: 128 MB
Submit: 249 Solved: 181
Description
蛤玮一直很想当主席,掌管自己的国家.对于一个富强的国家,拥有属于自己的货币是非常重要的.我们假设蛤玮的国家的货币在流通中只会以自然数的形式出现,即不会出现1.1蛤这样的情况.蛤玮需要发布一定面额的纸币,使得任意的钱数都可以用一定的纸币组成.蛤玮自己想了几种方案,然而他并不懂经济,不知道这些方案能不能满足要求.
Input
T(1<=T<=100),表示数据组数.
每组数据第一行n(1<=n<=10),表示发行几种货币,接下来一行包含n个正整数ai(1<=ai<=100),保证给出的n个数从左至右严格递增.
Output
如果蛤玮的方案能够表示任意的钱数,则输出"Yes",否则输出"No".
Sample Input
1
3
1 2 3
Sample Output
Yes
#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; int main() { int t,n,i,j; scanf("%d",&t); while(t--) { scanf("%d",&n); int flag=0,a; for(i=0;i<n;i++) { scanf("%d",&a); if(a==1) flag=1; } if(flag) printf("Yes\n"); else printf("No\n"); } return 0; }