8 11 周赛
来源:互联网 发布:java高级编程 pdf 编辑:程序博客网 时间:2024/05/01 21:01
这次比赛一道题也没做,我太没自信了,下次一定要相信自己,横向比较,不怕TLE,不怕WA,有想法就写,大胆利用题目中给出的条件。
A
http://www.bnuoj.com/bnuoj/problem_show.php?pid=33679
说是一道数论的题目,但是利用条件中的任何一个都能暴搞通过。
不过还是可以记住以下结论:
两平方数之和定理:
(a):将m分解为 m=p1*p2*.....pn*M^2;
其中p1、p2、....pn是互不相同的素因子,则m可表成两个平方数之和的充分必要条件是每个pi或为2或为摸4余1
(b):m能够表示成两个平方数之和m=a*a+b*b 且gcd(a,b)=1; 当且仅当以下两个条件之一成立
(I)m为奇数且m的每个素因子都摸4余1
(II)m为偶数,m/2是奇数且m/2的每个素因子都模4余1
代码1:利用第一个条件
#include<iostream>#include<cstdio>#include<string>#include<cstring>#include<algorithm>#include<stdlib.h>#include<cmath>using namespace std;int main(){ int t,p,q; cin>>t; while(t--) { int m,n; scanf("%d%d",&p,&q); //cout<<p<<" "<<q<<endl; int ans=max(abs(p),abs(q)); //cout<<ans<<endl; int sum=0; for(m=-ans; m<=ans; m++) { for(n=-ans; n<=ans; n++) { if(m==0&&n==0) continue; int a=m*m+n*n; int b=m*p+n*q; int c=m*q-n*p; if(b%a==0&&c%a==0) { //cout<<a<<" "<<b<<" "<<c<<endl; sum++; } } } if(sum==8) printf("P\n"); else printf("C\n"); } return 0;}
代码2:利用第二个条件
#include<iostream>#include<cstdio>#include<string>#include<cstring>#include<algorithm>#include<stdlib.h>#include<cmath>using namespace std;int squre[200001];void Squre(){ memset(squre,0,sizeof(squre)); int i,j; for(i=0; i*i<=20000; i++) //一开始i从0开始WA了,注重细节 { for(j=i; j*j+i*i<=20000; j++) squre[i*i+j*j]=1; }}int main(){ Squre(); int T; int p,q; cin>>T; while(T--) { scanf("%d%d",&p,&q); int flag=0; int ans=p*p+q*q; for(int i=2; i*i<=ans; i++) { if(ans%i==0) { if(squre[i]==1&&squre[ans/i]==1) { // cout<<i<<" "<<ans/i<<endl; flag=1; break; } } } if(flag==1) printf("C\n"); else printf("P\n"); } return 0;}
H 题目链接:http://www.bnuoj.com/bnuoj/problem_show.php?pid=33684
并查集的应用
题目大意:给出一部分物品a、b之间的重量差,求c、d之间的重量差,若有已知条件可以求,输出答案,否则输出“NUKNOWN"
#include<iostream>#include<cstdio>#include<string>#include<cstring>#include<algorithm>#include<cmath>#include<stdlib.h>using namespace std;int p[100050];int w[100050];int m,n;void init(){ for(int i=1;i<=n;i++) { p[i]=i; w[i]=0; }}int find(int x){ if(x==p[x]) return x; else { int ff=p[x]; p[x]=find(p[x]); w[x]+=w[ff]; return p[x]; }}int main(){ char c[5]; int a,b,weight; while(scanf("%d%d",&n,&m)!=EOF) { if(n==0&&m==0) return 0; init(); while(m--) { scanf("%s",&c); //cin10043ms scanf 843ms if(c[0]=='!') { scanf("%d%d%d",&a,&b,&weight); int aa=find(a); int bb=find(b); if(aa>bb) { p[aa]=bb; w[aa]=w[b]-w[a]-weight; } else { p[bb]=aa; w[bb]=w[a]-w[b]+weight; } } else { scanf("%d%d",&a,&b); if(find(a)==find(b)) { printf("%d\n",w[b]-w[a]); } else printf("UNKNOWN\n"); } } }}
- 8 11 周赛
- 13/8/18 周赛
- hpu 2015-8-8周赛
- 周赛
- 周赛
- 周赛
- 周赛
- 周赛
- 周赛
- 周赛
- 周赛
- 周赛
- 周赛
- 周赛
- 周赛
- 周赛
- 周赛
- 【2013春季SD高校ACM周赛8(SDUT)】各水题题解
- 使用JLINK间接烧写NAND FLASH
- 用Android自带的signapk.jar + .x509.pem + .pk8签名应用程序
- tomcat配置gzip压缩,提升网站的相应
- Posix互斥量pthread_mutex_t
- IE can't move focus 问题
- 8 11 周赛
- 【7gyy】老旧的回忆xp主题介绍_8.12
- Sicily1150 && Sicily1151(广搜)
- 面向接口编程的好处分析
- 李彦宏搭台,百度的夏日狂欢
- FromHandle
- fck在上传文件的时候 FCKeditor 报错
- 一个单例
- picture control控件