SGU 乱搞日志
SGU 100 A+B :太神不会
SGU 101 Domino:
题目大意:有N张骨牌,两张骨牌有两面有0到6的数字,能相连当且仅当前后数字相同,问能否有将N张骨牌连接的方案?思路:裸的欧拉回路,注意自环,连通
//sgu101
#include<iostream>
#include<cstdio>
#include <math.h>
#include<algorithm>
#include<string.h>
#include<queue>
#define MOD 1000003
#define maxn 2009
using namespace std;
int head[maxn],ans[maxn],top,now=,next[maxn],point[maxn];
int degree[maxn],sum=;
bool visit[maxn],ss[maxn],sign[maxn];
void add(int x,int y,bool si){
next[++now]=head[x];head[x]=now;
point[now]=y;ss[now]=si;
}
void dfs(int s){
for(int i=head[s];i;i=next[i])if(!visit[i>>]){
sum++;
int u=point[i];visit[i>>]=;dfs(u);
ans[++top]=i>>;sign[top]=ss[i];
}
}
int main()
{
int n,x,y,cnt=,s=;
scanf("%d",&n);
for(int i=;i<=n;i++){
scanf("%d%d",&x,&y);add(x,y,);add(y,x,);
degree[x]++;degree[y]++;s=x;
}
for(int i=;i<=;i++)if(degree[i]&)cnt++,s=i;dfs(s);
if(sum!=n ||cnt>){printf("No solution\n");return ;}
for(int i=top;i>=;i--){
printf("%d ",ans[i]);
if(sign[i]==)printf("+\n");else printf("-\n");
}
return ;
}
SGU 102 Coprimes:
题目大意:求小于n与n互质的数的个数 思路:欧拉函数哪家强
//sgu101
#include<iostream>
#include<cstdio>
#include <math.h>
#include<algorithm>
#include<string.h>
#include<queue>
#define MOD 1000003
#define maxn 2009
using namespace std;
int phi(int n)
{
int ret=n;
for(int i=;i*i<=n;i++)
{
if(n%i==)ret=(ret/i)*(i-);
while(n%i==)n/=i;
}
if(n>)ret=ret/n*(n-);
return ret;
}
int main()
{
int n;
scanf("%d",&n);
printf("%d\n",phi(n));
return ;
}
SGU 103 Traffic Lights
题目大意: 给一个无向图,每个节点有一个红绿灯(难道俄罗斯的灯是蓝紫灯?)灯会变换,能通过一条路当且仅当在通过前两个灯的颜色一样,问从s到t的最短时间是多少 思路:裸的SPFA,问题就是当不能通过时你得输出0!!!不然就会死在第6个点
#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
#define maxn 50000
using namespace std;
int tic[maxn],tib[maxn],ci[maxn],ric[maxn],s,t,n,m,now=;
int head[maxn],next[maxn],point[maxn],value[maxn],dist[maxn],pre[maxn],ans[maxn];
char ch[];
int col(int now,int l)
{
if(now<ric[l])return ci[l];
now-=ric[l];
int u,flag=;
if(ci[l])u=tic[l];else u=tib[l];
if(now%(tib[l]+tic[l])>=u)return ci[l];else return ci[l]^;
}
int remai(int now,int l)
{
if(now<ric[l])return ric[l]-now;
now=(now-ric[l])%(tic[l]+tib[l]);
int u;
if(ci[l])u=tic[l];else u=tib[l];
if(u-now>)return u-now;else return tic[l]+tib[l]-now;
}
int tim(int now,int l,int r,int k)
{
if(k==)return -;
int u=col(now,l),v=col(now,r);
if(u==v)return ;
u=remai(now,l);v=remai(now,r);
if(u==v)
{
int uu=tim(now+u,l,r,k+);
if(uu==-)return -;else return u+uu;
}
else return min(u,v);
}
void add(int x,int y,int v)
{
next[++now]=head[x];
head[x]=now;
point[now]=y;
value[now]=v;
}
int spfa(int s,int t)
{
memset(dist,-,sizeof(dist));
dist[s]=;
int visit[maxn]={};
visit[s]=;
queue<int>q;
q.push(s);
while(!q.empty())
{
int u=q.front();
visit[u]=;
q.pop();
for(int i=head[u];i;i=next[i])
{
int k=point[i];
int cost=tim(dist[u],k,u,);
if(cost==-)continue;else cost+=value[i];
if(dist[u]+cost<dist[k] || dist[k] == -)
{
pre[k]=u;
dist[k] = dist[u] + cost;
if(!visit[k])
{
visit[k] = ;
q.push(k);
}
}
}
}
if(dist[t]==-)return ;else return dist[t];
}
int main()
{
int s,t,x,y,v,h=;
scanf("%d%d%d%d",&s,&t,&n,&m);
for(int i=;i<=n;i++)
{
scanf("%s%d%d%d",ch+,&ric[i],&tib[i],&tic[i]);
if(ch[]=='B')ci[i]=;else ci[i]=;
}
for(int i=;i<=m;i++)
{
scanf("%d%d%d",&x,&y,&v);
add(x,y,v);
add(y,x,v);
}
printf("%d\n",spfa(s,t));
int u=t;
while(pre[u]!=)
{
ans[++h] = u;
u = pre[u];
}
ans[++h]=s;
for(int i=h;i>=;i--)
{
printf("%d ",ans[i]);
}
printf("%d\n",ans[]);
return ;
}
SGU 104 Little shop of flowers
题目大意:有V个花瓶,F束花,F束花只能按一定顺序插入花瓶,并且插入某个花瓶的美感度是固定的,问美感读最大是多少 思路:裸dp,转移方程在代码里,加个转移就好了
#include<iostream>
#include<cstdio>
using namespace std;
//dp[i][j]=max(dp[i-1][j],dp[i-1][j-1]+a[i][j]);
int dp[][],a[][],ans[];
bool pre[][];
int main()
{
int f,v;
scanf("%d%d",&f,&v);
for(int i=;i<=f;i++)
{
for(int j=;j<=v;j++)
{
scanf("%d",&a[i][j]);
}
}
for(int i=;i<=f;i++)
{
dp[i][]=-0x3f3f3f3f;
for(int j=;j<=v;j++)
{
if(dp[i][j-]>dp[i-][j-]+a[i][j])
{
dp[i][j]=dp[i][j-];
pre[i][j]=;
}
else
{
dp[i][j]=dp[i-][j-]+a[i][j];
pre[i][j]=;
}
}
}
printf("%d\n",dp[f][v]);
int u=f,h=;
for(int i=v;i>=;i--)
{
if(!pre[u][i])
{
u--;
ans[++h]=i;
}
if(u==)break;
}
for(int i=h;i>=h-f+;i--)
{
printf("%d ",ans[i]);
}
return ;
}
SGU 105 Div 3
题目大意:给你 1 12 123...12345678910...的数列,问你前n个数中有多少能被3整除?思路:能被三整除的数当且仅当所有十进位数的和能被3整除,于是就能用等差数列求和乱搞了
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
long long n;
while (scanf("%I64d",&n)!=EOF)
{
long long u=n/;
u<<=;
if((n+)%==)u++;
printf("%I64d\n",u);
}
return ;
}
SGU 107 987654321 problem
题目大意:有多少N位十进制数的平方的尾数是987654321思路:暴力打表后发现9位数一共有8个数满足,因此无论多少位只要尾数是这8个数都OK,由于不能有前导0,因此9位数的情况单独考虑,本来以为要高精度来着,马上意识到答案是720000....的形式 sgu第一次这么善良
/*
111111111 12345678987654321
119357639 14246245987654321
380642361 144888606987654321
388888889 151234567987654321
611111111 373456789987654321
619357639 383603884987654321
880642361 775530967987654321
888888889 790123456987654321
*/
#include<cstdio>
#include<iostream>
using namespace std;
int main()
{
int n;
scanf("%d",&n);
if(n<=)printf("");
else if(n==)printf("");
else
{
printf("");
for(int i=;i<=n-;i++)printf("");
}
puts("");
return ;
}
SGU108 Self-numbers 2
题目大意:一个数n的后继是这个数本身加上它十进制位所有的数字,但有些数不能成为任何数的后继,找出第N个这样的数字 思路:直接按照题目模拟会MLE啊啊啊啊,看了题解才想到一个数的后继最多只是这个数+64,然后给优化下
#include<cstdio>
int ans[],x,h;
bool flag[];
int f(int x)
{
int ans=x;
while(x!=)
{
ans+=x%;
x/=;
}
return ans;
}
int main()
{
int n,k;
scanf("%d%d",&n,&k);
for(int i=;i<=n;i++)
{
if(flag[i%]==)
{
ans[++h]=i;
}
flag[f(i)%]=;
flag[i%]=;
}
printf("%d\n",h);
for(int i=;i<=k;i++)
{
scanf("%d",&x);
printf("%d ",ans[x]);
}
}
SGU 123 The sum 因为k很小,所以就考你会不会c语言
#include<iostream>
#include<cstdio>
#define maxn 1000
using namespace std;
long long fib[maxn],sum[maxn];
int main()
{
int k;
fib[]=fib[]=;
sum[]=;sum[]=;
for(int i=;i<=;i++)
{
fib[i]=fib[i-]+fib[i-];
sum[i]=sum[i-]+fib[i];
}
cin>>k;
cout<<sum[k];
return ;
}
SGU 134 就是求一个树的重心
#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cstring>
#define maxn 52010
#define LLD "%I64d"
using namespace std;
long long head[maxn],n,next[maxn],ans=1ll<<;
long long ver[maxn],point[maxn],ans_num,siz[maxn],now;
bool visit[maxn];
void add(int x,int y)
{
next[++now]=head[x];
head[x]=now;
point[now]=y;
}
void dfs(int k)
{
visit[k]=;
siz[k]=;
long long v=;
for(int i=head[k];i;i=next[i])
{
int u=point[i];
if(visit[u]==)continue;
dfs(u);
siz[k]+=siz[u];
v=max(v,siz[u]);
}
v=max(v,n-siz[k]);
if(v<ans)
{
ans_num=;
ver[ans_num]=k;
ans=v;
}
else if(v==ans)ver[++ans_num]=k;
}
int main()
{
ans=1ll<<;
now=;
memset(visit,,sizeof(visit));
memset(head,,sizeof(head));
int x,y;
scanf(LLD,&n);
if(n==)while();
for(int i=;i<n;i++)
{
scanf("%d%d",&x,&y);
add(x,y);
add(y,x);
}
dfs();
sort(ver+,ver++ans_num);
printf(LLD " "LLD"\n",ans,ans_num);
for(int i=;i<ans_num;i++)
{
printf(LLD " ",ver[i]);
}
printf(LLD "\n",ver[ans_num]);
return ;
}
SGU 乱搞日志的更多相关文章
- URAL 1827 Indigenous Wars(排序、乱搞)
题意:给一个长度为n数组{a[i]}.有m个操作Ti,Si,Li表示找以Ti值结束,以Si值开始,长度为Li的连续子串.找到后,将区间的答案值设为1.一开始答案值全部为0.最后输出n个答案值. 好久没 ...
- UVA 11853 [dfs乱搞]
/* 大连热身E题 不要低头,不要放弃,不要气馁,不要慌张 题意: 在1000×1000的格子内有很多个炮弹中心,半径给定. 为某人能否从西部边界出发,从东部边界走出. 不能输出不能,能的话输出最北边 ...
- Codeforces 732e [贪心][stl乱搞]
/* 不要低头,不要放弃,不要气馁,不要慌张 题意: 给n个插座,m个电脑.每个插座都有一个电压,每个电脑都有需求电压. 每个插座可以接若干变压器,每个变压器可以使得电压变为x/2上取整. 有无限个变 ...
- 【BZOJ-4692】Beautiful Spacing 二分答案 + 乱搞(DP?)
4692: Beautiful Spacing Time Limit: 15 Sec Memory Limit: 128 MBSubmit: 46 Solved: 21[Submit][Statu ...
- 【BZOJ-3578】GTY的人类基因组计划2 set + map + Hash 乱搞
3578: GTY的人类基因组计划2 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 367 Solved: 159[Submit][Status][ ...
- 【BZOJ-2937】建造酿酒厂 前缀和 + 展环为链 + 乱搞
2937: [Poi2000]建造酿酒厂 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 70 Solved: 24[Submit][Status][D ...
- SCOI 2013 密码 & 乱搞
题意: Fish 是一条生活在海里的鱼.有一天他很无聊,就到处去寻宝.他找到了位于海底深处的宫殿,但是一扇带有密码锁的大门却阻止了他的前进.通过翻阅古籍,Fish 得知了这个密码的相关信息:1. 该密 ...
- 种树 & 乱搞
题意: 在一个(n+1)*(m+1)的网格点上种k棵树,树必须成一条直线,相邻两棵树距离不少于D,求方案数. SOL: 这题吧...巨坑无比,本来我的思路是枚举每一个从(0,0)到(i,j)的矩形,然 ...
- URAL - 1920 Titan Ruins: the Infinite Power of Magic(乱搞)
搞死人的题目,,, 就是在n*n的方格中找路径长度为L的回路. 开始的思路值适合n为偶数的情况,而忽视了奇数的case,所以wa了一次. 然后找奇数case的策略,代码从70多行变成了100多,然后改 ...
随机推荐
- Scanner和 Random类,控制语句的例题,商品管理(直接赋值)
Scanner类的使用: import java.util.Scanner; class Demo02 { public static void main(String[] args) { //1.导 ...
- gravity 使用操作。
gravity 使用操作.最近我司有一个比较奇葩的需求,我们的环境是主从,因为数据量较大会定期的删除数据,最近不行了,要求新建出来一个库 同步正事环境的数据,但是要剔除 delete ,drop,tr ...
- HTTP-点开浏览器输入网址背后发生的那点事
前言 Internet最早来源于美国国防部ARPANet,1969年投入运行,到现在已有很长一段路了,各位想要了解发展史可以百度下,这里就不多说了. 现如今当我们想要获取一些资料,首先是打开某个浏览器 ...
- Python_列表、字典、字符串、集合操作
一.list Python内置的一种数据类型是列表:list.list是一种有序的集合,可以随时添加和删除其中的元素.对于list的操作,我们要学会增删改查. 查 我们可以直接索引查找,也可以通过切片 ...
- Centos7在运行yum命令时出现报错及排查处理过程
1.1 现象描述 Centos系统在正常重启后,运行yum命令安装软件工具的时候出现以下报错: cannot open Packages index using db5 - Structure ne ...
- 关于debug
2019-04-05 11:18:15 1. debug 需巧用两个工具 1.1 用‘#’把感觉会出错的代码段注释掉 多行注释有两种快捷操作: 在需要注释的多行代码块前后加一组三引号''' 选中代 ...
- B1019 数字黑洞 (20分)
B1019 数字黑洞 (20分) 给定任一个各位数字不完全相同的 4 位正整数,如果我们先把 4 个数字按非递增排序,再按非递减排序,然后用第 1 个数字减第 2 个数字,将得到一个新的数字.一直重复 ...
- 动态规划:HDU1248-钱币兑换问题
解题心得: (青蛙跳台阶:有n阶台阶,青蛙可以一次跳一阶也可以一次跳两阶,问总共有多好中跳法) 1.之前把这个问题的思路弄错了,以为是递推,就像青蛙跳台阶,用斐波那契求解.但是用斐波那契肯定会超范围. ...
- android json 解析 kotlin
前面 写了一次 kotlin解析json 但是,真的写得太烂,直接删掉了,现在重新整理一下.顺便记录一下今天坑了我很久的小问题. 1.首先从最简单的入手吧 一个json的字符串:=====就叫做jso ...
- POI-java下载excel-HSSFWorkbook
import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOExceptio ...