-TEST 12 for NOIP ......(30-300)-----(( ! ))
来源:互联网 发布:架子鼓软件 编辑:程序博客网 时间:2024/05/20 05:31
头更更大
这个10月完就要去搞NOIP了。。。
10月30天也就3次测试。。。为保佑进省一我还是每次测试玩都写个总结。。
boomshakalaka。。。彻底全部写炸。。。
第一题双连通图都打好了最后输出卖萌
第二题不敢打状态压缩,第三题不会也就算了。。。
第一题全挂是什么鬼??????
拿面包砸死自己的心情都没了
最近态度明显没有以前积极了。。可能是之前考的还可以的原因。。然后自我膨胀被稍难一点的题啪啪打脸。。
还是一句话:多刷题!!
下面面详细解答:
T1 建设图(30/100):
考的是刚学过的很简单的双连通分量(在无向图中裸奔Tarjan)即可。。。找到所有入度为1的双连通分量。取为ans。
但是最后输出的时候做死的ans-1??????
(没有考虑到 菊花 发散图,当时只考虑了链状图)
(ans+1)/2就满分。。 自己去把自己拖出去枪毙5分钟
T2 乘积(0/100):
貌似70%的分是可以暴力做的?????
100%的正解用到了我最不擅长的状压Dp。。。今天要多练练再回来看。。一定要回来把这道题搞了!!!
T3 Math(0/100):
本来想的乱搞一个快速幂套快速乘。。。结果GG
GYR大佬一群人则是通过找规律直接搞出正解。。。膜拜orz
感想
多练状压Dp!!!多刷题!!!不要卖萌!!!
还有发现没事可以上洛谷 玩一玩 刷刷题。。。
代码
T1
std.cpp
#include<iostream>#include<iomanip>#include<cstdio>#include<cstdlib>#include<cstdio>#include<cstring>#include<string>#include<cmath>#include<algorithm>#include<queue>using namespace std;const int kkk = 200005;inline int read(){ int X=0,w=1; char ch=0; while(ch<'0' || ch>'9') {if(ch=='-') w=-1;ch=getchar();} while(ch>='0' && ch<='9') X=(X<<3)+(X<<1)+ch-'0',ch=getchar(); return X*w;}int n,m,val,res=0,ans=0;int first[kkk];struct node{ int u,v,val,next; bool flag;}side[kkk*2];int cnt=0,top=0,tot=0,cci=1;void addedge(int u,int v,int val){ side[++cci].u = u; side[cci].v = v; side[cci].val = val; side[cci].next = first[u]; first[u] = cci;}bool visit[kkk];int num[kkk],edge[kkk];int dfn[kkk],low[kkk],belong[kkk],stk[kkk];void tarjan(int u){ low[u]=dfn[u]=++cnt; stk[++top]=u; visit[u]=true; for(int i=first[u];i;i=side[i].next) { if(side[i].flag)continue; side[i].flag = true; side[i^1].flag = true; int v = side[i].v; if(!dfn[v]){tarjan(v);low[u]=min(low[u],low[v]);} else if(visit[v]){low[u]=min(low[u],dfn[v]);} } if(dfn[u]==low[u]) { int v=-1;tot++; while(u!=v) { v=stk[top--]; belong[v]=tot; num[tot]++; visit[v]=false; } }}int main(){ std::ios::sync_with_stdio(false); std::cin.tie(0);std::cout.tie(0); n=read(); m=read(); for(int i=1;i<=m;i++) { int u,v; u=read(); v=read(); addedge(u,v,1); addedge(v,u,1); } for(int i=1;i<=n;i++)if(!dfn[i])tarjan(i); for(int i=2;i<=cci;i+=2) if(belong[side[i].u]!=belong[side[i].v]) edge[belong[side[i].u]]++, edge[belong[side[i].v]]++; int ans=0; for(int i=1;i<=tot;i++) if(edge[i]==1) ans++; cout<<(ans+1)/2<<endl; return 0;}
T2
zay.cpp
#include<iostream>#include<iomanip>#include<cstdio>#include<cstdlib>#include<cstring>#include<string>#include<algorithm>#include<cmath>#include<queue>#include<vector>using namespace std;typedef long long ll;const int nod=1000000007;int n,k;int prime[18]={0,2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59};inline int read(){ int X=0,w=1; char ch=0; while(ch<'0' || ch>'9') {if(ch=='-') w=-1;ch=getchar();} while(ch>='0' && ch<='9') X=(X<<3)+(X<<1)+ch-'0',ch=getchar(); return X*w;}bool check(ll x){ for(int i=1;i<=17;i++) if(x%(prime[i]*prime[i])==0) return false; return true;}ll ans[600];void get_ans(int pre,ll now,int cnt){ if(check(now))ans[cnt]++; else return; if(cnt==k) return; for(register int i=pre+1;i<=n;i++) get_ans(i,(ll)now*i,cnt+1);}int t,sum=0;int main(){ t=read(); while(t--) { sum=0; n=read(); k=read(); memset(ans,0,sizeof(ans)); for(register int i=1;i<=n;i++)get_ans(i,i,1); for(register int i=1;i<=k;i++)sum=(sum+ans[i])%nod; cout << sum << endl; }}
std.cpp
T3
std.cpp
#include<iostream>#include<iomanip>#include<cstdio>#include<cstdlib>#include<cstring>#include<string>#include<algorithm>#include<cmath>#include<queue>#include<vector>using namespace std;typedef long long ll;inline int read(){ int X=0,w=1; char ch=0; while(ch<'0' || ch>'9') {if(ch=='-') w=-1;ch=getchar();} while(ch>='0' && ch<='9') X=(X<<3)+(X<<1)+ch-'0',ch=getchar(); return X*w;}ll x,y;ll a;int n; ll ksc(ll x,ll y,ll z)//快速乘 { ll ans=0; while(y>0) { if(y&1)ans=(ans+x)%z; y=y>>1; x=(x+x)%z; } return ans;}ll ksm(ll x,ll y,ll z)//快速幂 { ll ans=1; while(y>0) { if(y&1)ans=ksc(ans,x,z); y=y>>1; x=ksc(x,x,z); } return ans;}int t; int main(){ t=read(); while(t--) { a=read(); n=read(); if(a%2){cout<<1<<endl;continue;} else { int ans=0; int maxx=(1<<n); for(int i=2;i<=n;i+=2) if(ksm(a,i,maxx)==ksm(i,a,maxx)) ans++; int c=(n+a-1)/a; int x=(1<<n)>>c; int t=n>>c; ans = ans+x-t; cout<<ans<<endl; } } return 0;}
阅读全文
1 0
- -TEST 12 for NOIP ......(30-300)-----(( ! ))
- -TEST 13 for NOIP 。。。(210/300)
- -TEST 14 for NOIP 。。。(25-300)
- -TEST 18 for NOIP 。。。(0-300)
- -TEST 19 for NOIP 。。。(105-300)
- -TEST 20 for NOIP 。。。(80-300)-----(( ! ))
- -TEST Fin 1 for NOIP 垃圾电脑(300-300)
- *TEST 7 for NOIP 玄学解题 (150/300)
- *TEST 8 for NOIP gets()有毒!!! (40/300)<<<<<(( ! ))
- *TEST 9 for NOIP 先打暴力(100/300)
- *TEST 10 for NOIP 迷幻测试 (230/300)
- *TEST 11 for NOIP 再次爆炸 (100-300)-----(( ! ))
- -TEST 15 for NOIP 决策有毒(150-300)
- -TEST 17 for NOIP 暴力有毒(190-300)
- -TEST Fin 2 for NOIP 最后准备(110-300)
- Test 5 for NOIP
- Test 7 for NOIP
- Test 6 for NOIP
- printf函数接口的解读
- express向jade传值问题
- python 中的 __call__方法在实际环境中的应用
- Github出现 ssh operation timed out
- Java初学者
- -TEST 12 for NOIP ......(30-300)-----(( ! ))
- Docker 命令大全
- su和sudo
- Unity中的C#与C++交互
- ionic页面
- PullToRefreshScrollView
- 编程计算并输出一个3位整数的逆序数
- hdu 4768 Flyer
- KendoUI之Grid的问题详解