题目来自ICPC2017 Hua-Lien
A题:Smooth Sequences
有一串序列,题目要求最多有一组连续两个数字之差的绝对值大于d,问输入的序列是否满足这个条件
1 #include2 using namespace std; 3 4 int main() 5 { 6 int n,d,a[10005]; 7 while(scanf("%d",&n)!=EOF) 8 { 9 if(n==0) break; 10 scanf("%d",&d); 11 int d_count=0; 12 int pos[1005],cnt=0; 13 for(int i=1;i<=n;i++) 14 { 15 scanf("%d",&a[i]); 16 if(i==1) continue; 17 if(abs(a[i]-a[i-1])>d) d_count++,pos[cnt++]=i; //统计不满足条件的个数 18 } 19 if(n==1||n==2) //特判n==1和n==2的情况 20 { 21 printf("Y\n"); 22 continue; 23 } 24 if(d_count==0) printf("Y\n"); //都满足的情况 25 else if(d_count>=3) printf("N\n"); //一定不满足 26 else if(d_count==1) 27 { 28 if(pos[0]==2||pos[0]==n) //两端的情况 29 printf("Y\n"); 30 else 31 { 32 if(abs(a[pos[0]]-a[pos[0]-1])>2*d&&abs(a[pos[0]-1]-a[pos[0]+1])>2*d) //要看连续的四个数 33 printf("N\n"); 34 else 35 printf("Y\n"); 36 } 37 } 38 else 39 { 40 if(pos[1]-pos[0]!=1) //一定不满足 41 printf("N\n"); 42 else 43 { 44 if(abs(a[pos[0]-1]-a[pos[1]])>2*d)//看连续的三个数 45 printf("N\n"); 46 else 47 printf("Y\n"); 48 } 49 } 50 51 } 52 return 0; 53 }
B题:Treesome
直接按题目模拟
1 #include2 using namespace std; 3 int c[350][350]; 4 int main() 5 { 6 int t,n; 7 scanf("%d",&t); 8 while(t--) 9 { 10 scanf("%d",&n); 11 int m=(n-1)*n/2; 12 int x,y,z; 13 memset(c,0,sizeof(c)); 14 while(m--) 15 { 16 scanf("%d%d%d",&x,&y,&z); 17 c[x][y]=z; 18 c[y][x]=z; 19 } 20 int ans=-1; 21 for(int i=1;i<=n;i++) 22 { 23 for(int j=1;j<=n;j++) 24 { 25 for(int k=1;k<=n;k++) 26 { 27 if(i!=j&&j!=k&&i!=k) 28 ans=max(ans,c[i][j]+c[j][k]+c[i][k]); 29 } 30 } 31 } 32 printf("%d\n",ans); 33 } 34 return 0; 35 }
C题:Coefficient Computation
求C(n,k)的d进制(1 直接用java写 D题:Network Report 直接Floyd H题:A Partial Order Relation I题:Tracer Deployment 求二分图最小点覆盖包含的点数。根据定理其等于二分图最大匹配包含的边数 可以当作一个模板了 K题:Assigning Frequencies 暴搜 参考https://www.cnblogs.com/albert-biu/p/9544124.html 1 import java.util.*;
2 import java.math.BigInteger;
3 public class Main {
4
5 public static void main(String[] args) {
6 // TODO Auto-generated method stub
7 Scanner cin = new Scanner(System.in);
8 int t = cin.nextInt();
9 BigInteger ans,tmp,p;
10 int n,k,d;
11 String str;
12 while (t-- != 0) {
13 tmp=BigInteger.valueOf(1);
14 ans=BigInteger.valueOf(1);
15 n=cin.nextInt();
16 k=cin.nextInt();
17 d=cin.nextInt();
18 if(k==0||k==n)
19 {
20 ans=BigInteger.valueOf(1);
21 }
22 else if(k==1)
23 {
24 ans=BigInteger.valueOf(n);
25 }
26 else
27 {
28 for(int i=n;i>=n-k+1;i--)
29 {
30 p=BigInteger.valueOf(i);
31 ans=ans.multiply(p);
32 }
33 for(int i=1;i<=k;i++) {
34 p=BigInteger.valueOf(i);
35 tmp=tmp.multiply(p);
36
37 }
38 ans=ans.divide(tmp);
39
40 }
41 str=ans.toString(d);
42 System.out.println(str);
43
44 }
45 }
46
47 }
1 #include
1 #include
1 #include
1 #include
L题:Finding the Bases
1 #include