题目链接
http://acm.hdu.edu.cn/search.php?field=problem&key=2014%C9%CF%BA%A3%C8%AB%B9%FA%D1%FB%C7%EB%C8%FC%A1%AA%A1%AA%CC%E2%C4%BF%D6%D8%CF%D6%A3%A8%B8%D0%D0%BB%C9%CF%BA%A3%B4%F3%D1%A7%CC%E1%B9%A9%CC%E2%C4%BF%A3%A9&source=1&searchmode=source
A:思维题
题意:给你n个数,Jerry可以任意对每个数进行操作,操作方法是对每个数加0,或者k的整倍数。问能不能让1---n这n个数每个数只出现一次。
#include<bits/stdc++.h> using namespace std; const int maxn = 105; int a[maxn],cnt[maxn]; int T,n,k; int main () { scanf("%d",&T); while(T--) { scanf("%d%d",&n,&k); bool fg=1; memset(cnt,0,sizeof(cnt)); for(int i=1;i<=n;i++) { scanf("%d",&a[i]); if(a[i]>n) fg=0; if(fg) cnt[a[i]]++; } for(int i=1;i<=n&&fg;i++)//向后滚动 { if(cnt[i]>1) { cnt[i+k]+=(cnt[i]-1); cnt[i]=1; } } for(int i=1;i<=n&&fg;i++) { if(cnt[i]!=1) fg=0; } if(fg) printf("Jerry "); else printf("Tom "); } return 0; }
B:题意很好懂算法是,线段树+扫描线。
C:
D:放置战舰(二分图)
F:给出一个表达式的系数和变量,然后输出表达式。注意下面几个点1、第一个数、最后一个数。2、正负数。3、0,-1,1特判。4、如果全部为零,输出0。
#include<bits/stdc++.h> using namespace std; typedef long long LL; const int maxn=150; char s[maxn]={'0','p','q','r','u','v','w','x','y','z','j'};//10; int a[maxn]; int T,n,k; int main () { scanf("%d",&T); while(T--) { for(int i=1;i<=10;i++) scanf("%d",&a[i]); bool fg=1,ok=1; for(int i=1;i<=10;i++) { if(a[i]) { ok=0; if(fg)//第一个 { if(i!=10) { if(a[i]==1) { printf("%c",s[i]); } else if(a[i]==-1) { printf("-%c",s[i]); } else printf("%d%c",a[i],s[i]); } else printf("%d",a[i]); fg=0; } else { if(i!=10) { if(a[i]>0) { if(a[i]==1) printf("+%c",s[i]); else printf("+%d%c",a[i],s[i]); } else { if(a[i]==-1) printf("-%c",s[i]); else printf("%d%c",a[i],s[i]); } } else { if(a[i]>0) printf("+%d",a[i]); else printf("%d",a[i]); } } } } if(ok) printf("0 "); printf(" "); } return 0; }
J:判断安卓手机型号的大小。注意:1、如果最后一个字母是A,那么通常省略。2、如果第二个字母相同则比较后面所有的字母,否则最后一个字母不包含在内。
#include<bits/stdc++.h> using namespace std; const int maxn = 105; char s1[maxn],s2[maxn]; int T; int cmp(int s,int t) { for(int i=s;i<=t;i++) { if(s1[i]>s2[i]) return 1; if(s1[i]<s2[i]) return -1; } return 0; } int main () { int ic=0; scanf("%d",&T); while(T--) { scanf("%s%s",s1,s2); int l=strlen(s1); if(l==5) s1[5]=='A'; l=strlen(s2); if(l==5) s2[5]=='A'; int a1=cmp(0,0); int a2; if(s1[1]==s2[1]) a2=cmp(2,5); else a2=cmp(2,4); printf("Case %d:",++ic); if(a1==1) printf(" >"); else if(a1==0) printf(" ="); else printf(" <"); if(a2==1) printf(" > "); else if(a2==0) printf(" = "); else printf(" < "); } return 0; }