NOIP模拟10.24
来源:互联网 发布:淘宝收取费用 编辑:程序博客网 时间:2024/05/22 06:15
2015提高D1
A.神奇的幻方。 这不今年初赛题么。。AC
B.信息传递。 这题卡了许久。。大概是老了。。%%%elijahqi
C.斗地主。 超级大爆搜,先把顺子都搜索枚举了,然后剩下的牌贪心。
A
#include <bits/stdc++.h>using namespace std;#define ll long long#define N 40#define inf 0x3f3f3f3finline int read(){ int x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar(); return x*f;}int n,a[N][N];int main(){// freopen("a.in","r",stdin); n=read();int x=1,y=n/2+1;a[x][y]=1; for(int i=2;i<=n*n;++i){ if(x==1&&y==n) x=2; else if(x==1) x=n,y++; else if(y==n) x--,y=1; else if(!a[x-1][y+1]) x--,y++; else x++;a[x][y]=i; }for(int i=1;i<=n;++i){ for(int j=1;j<=n;++j) printf("%d ",a[i][j]);puts(""); }return 0;}
B
#include <bits/stdc++.h>using namespace std;#define ll long long#define N 200010#define inf 0x3f3f3f3finline int read(){ int x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar(); return x*f;}int n,to[N],dfn[N],num=0,ans=inf;bool f[N];void dfs(int x){ dfn[x]=++num;f[x]=1; if(dfn[to[x]]){ if(f[to[x]]) ans=min(ans,num+1-dfn[to[x]]); f[x]=0;return; }else dfs(to[x]),f[x]=0;}int main(){// freopen("b.in","r",stdin); n=read();for(int i=1;i<=n;++i) to[i]=read(); for(int i=1;i<=n;++i) if(!dfn[i]) dfs(i); printf("%d\n",ans); return 0;}
C
#include <bits/stdc++.h>using namespace std;#define ll long long#define N 15#define inf 0x3f3f3f3finline int read(){ int x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar(); return x*f;}int tst,n,a[N],ans=30;void solve(int res){//剩下的牌贪心搞 int num[5];memset(num,0,sizeof(num)); for(int i=0;i<=14;++i) num[a[i]]++; while(num[4]){ if(num[1]>=2) num[1]-=2,num[4]--; else if(num[2]>=2) num[2]-=2,num[4]--; else if(num[1]==0&&num[2]==1) num[2]--,num[4]--; else break;res++; }while(num[3]){ if(num[1]) num[1]--,num[3]--; else if(num[2]) num[2]--,num[3]--; else break;res++; }while(num[4]>=2) num[4]-=2,res++; while(num[3]>=3) num[3]-=3,res+=2; res+=num[1]+num[2]+num[3]+num[4]; ans=min(res,ans);}void dfs(int res){ for(int i=3;i<=10;++i){//处理单顺 if(!a[i]||!a[i+1]||!a[i+2]||!a[i+3]||!a[i+4]) continue; a[i]--;a[i+1]--;a[i+2]--;a[i+3]--;a[i+4]--;int x=5; dfs(res+1);while(i+x<=14&&a[i+x]) a[i+x]--,dfs(res+1),x++; while(x) x--,a[i+x]++; }for(int i=3;i<=12;++i){//处理双顺 if(a[i]<2||a[i+1]<2||a[i+2]<2) continue; a[i]-=2;a[i+1]-=2;a[i+2]-=2;int x=3; dfs(res+1);while(i+x<=14&&a[i+x]>=2) a[i+x]-=2,dfs(res+1),x++; while(x) x--,a[i+x]+=2; }for(int i=3;i<=13;++i){ if(a[i]<3||a[i+1]<3) continue; a[i]-=3;a[i+1]-=3;int x=2; dfs(res+1);while(i+x<=14&&a[i+x]>=3) a[i+x]-=3,dfs(res+1),x++; while(x) x--,a[i+x]+=3; }solve(res);}int main(){// freopen("a.in","r",stdin);// freopen("a.out","w",stdout); tst=read();n=read(); while(tst--){ memset(a,0,sizeof(a));ans=30; for(int i=1;i<=n;++i){ int x=read(),y=read();if(x==1) a[14]++;else a[x]++; }dfs(0); printf("%d\n",ans); }return 0;}
阅读全文
0 0
- NOIP模拟10.24
- NOIP模拟10.24 R2
- noip模拟10.24
- 【NOIP模拟】 (10.24) T3 math
- Noip模拟
- 【NOIP模拟】20151004模拟
- 【NOIP模拟】 20151005模拟
- 【NOIP模拟】 20151006模拟
- 【NOIP模拟】 20151007模拟
- 【NOIP模拟】20151014模拟
- 【NOIP模拟】20151015模拟
- 10.24南海NOIP模拟测解题报告
- 【NOIP模拟】(10.24) T1 建设树
- NOIP模拟(10.24)T1 建设图
- NOIP模拟(10.24)T2 乘积
- NOIP模拟(10.24)T3 Math
- 10.23~10.24NOIP模拟测试总结
- 【09 NOIP 模拟】light
- 修改plsql的连接数据库
- Win10下Wireshark找不到接口的解决办法
- boost::pool
- Android Kotlin(一)—— Kotlin 入门与 HttpURLConnection 网络请求
- BLE Mesh网络协议综述
- NOIP模拟10.24
- CentOS的下安装MongoDB
- SpringBoot配置多数据源
- jeesite导入excel表格做法
- libsvm中predict_label返回值为空的解决办法
- 垂直居中
- eclipse配置Android SDK NDK
- iOS中的锁的介绍及简单使用
- 极光推送与苹果自带推送的差别