随笔分类 - codeforce
摘要:A:超级大水题;代码: 1 #include 2 #define maxn 105 3 using namespace std; 4 int n,a[maxn],x,y,ans; 5 int main() 6 { 7 scanf("%d",&n); 8 for(int i=1; i=x&&a[i]=x&&(ans-a[i])n)printf("0");23 return 0;24 }View Code B:因为每次跳舞最多只有一个人以前跳过,所以很简单; 1 #include 2 #define maxn 1000
阅读全文
摘要:A:超级大水题,不解释:代码: 1 #include 2 #include 3 using namespace std; 4 int a,b; 5 int main() 6 { 7 int n,m,ma=0,mi=9999999,mb=9999999; 8 cin>>n>>m; 9 for(int i=0; i>a;12 if(a>ma)ma=a;13 if(a>b;18 if(mb>b)mb=b;19 }20 if(mi*2>ma)ma=mi*2;21 if(ma>=mb)cout 2 #incl...
阅读全文
摘要:只会做三个题;A:简单题,不解释: 1 #include 2 using namespace std; 3 4 int k,d; 5 6 int main() 7 { 8 scanf("%d%d",&k,&d); 9 if(d==0)10 {11 if(k>1)puts("No solution");12 else puts("0");13 }14 else15 {16 if(k>=d)17 {18 for(int i=0; i 2 #define max...
阅读全文
摘要:这个题是个数学题;2n个数,要求n个向上取整,n个向下取整,然后要求最后的数列之和与初始数列之和的差异最小;差异di=(1-ai)-(bi-0);容易看出ai与bi 的符号相同,故可以一次性将他们全部处理掉;最后用一个整数减去上面一步得到的数;得到的最小值就是我们所需要的;代码: 1 #include 2 #include 3 #include 4 using namespace std; 5 int n,cnt; 6 double x,ans; 7 int main() 8 { 9 scanf("%d",&n);10 double res=99999999;11
阅读全文
摘要:很简单的一个题;只需要将他们排一下序,然后判断一下就可以了!代码: 1 #include 2 #include 3 #define maxn 100005 4 using namespace std; 5 6 int n,x; 7 int a[maxn][2],cot; 8 struct node 9 {10 int v,id;11 bool operator<(node const &t)const12 {13 if(v==t.v)return id<t.id;14 return v<t.v;15 }16 } no[maxn]...
阅读全文
摘要:超级大水题;只要用到一个小学用过的结论就可;能被9整除的数它的各位数相加能被9整除:代码: 1 #include 2 #define maxn 1005 3 using namespace std; 4 int n,c0,c5,x; 5 int main() 6 { 7 cin>>n; 8 while(n--) 9 {10 cin>>x;11 if(x==0)c0++;12 else c5++;13 }14 if(c0==0){cout<<"-1";return 0;}15 c5=c5-c5%9;1...
阅读全文
摘要:思维题,感叹自己的智商不够啊。思路大概是这样的:1.排在队伍前面的女生是不用换位置的;2.女生在队伍中的顺序是不会变的;3.最后一个女生稳定了则程序结束;4.每个女生都有个初始位置和最终位置。如果一个女生的初始位置减去最终位置>现在的最大值,则最大值更新;否则最大值+1;代码: 1 #include 2 using namespace std; 3 char s; 4 int main() 5 { 6 int r=0,f=1,l=0; 7 while(getchar()=='F'); 8 while((s=getchar())=='F'||s=='
阅读全文
摘要:感觉像是一个数位dp,高位的1如果不选的话,前面低位的数都可以选;不然只能选择为1的数;代码: 1 #include 2 #include 3 #define maxn 100005 4 using namespace std; 5 char s[maxn]; 6 int sum[maxn],num[maxn],n,ans,all; 7 8 int main() 9 {10 cin>>n;11 for(int i=1;i>num[i],sum[i]+=sum[i-1]+num[i];13 cin>>s;14 for(int i=n-1;i>=0;i--)15
阅读全文
摘要:如果某个数出现的次数大于或等于2次,那么平均分配到两个容器里面;这里利用一个k来使得当出现次数为奇数时候分配得更加均匀;剩下的就平均分配到两个容器里;代码: 1 #include 2 using namespace std; 3 4 int a[220],b[220],f[110],s,k,n; 5 int main() 6 { 7 cin >> n; 8 for(int i=0;i> a[i];11 f[a[i]]++;12 }13 for(int i=0;i=2)15 {16 s+=f[i]-2;17...
阅读全文
摘要:题意:要求找到最少次数的交换次数使得两组数都是偶数;很明显答案要么是0,要么是1,或者不管怎么交换都不行(-1);所以: 1 #include 2 #define maxn 105 3 using namespace std; 4 5 int n,x,y; 6 7 int main() 8 { 9 scanf("%d",&n);10 int a=0,b=0,c=0;11 while(n--)12 {13 scanf("%d%d",&x,&y);14 a+=x,b+=y;15 c+=(y%2)!=(x%2);16...
阅读全文
摘要:一个很简单的题;方法一:二分。代码: 1 #include 2 #include 3 #define maxn 100005 4 using namespace std; 5 6 int num[maxn],n; 7 8 int main() 9 {10 freopen("input.txt", "r", stdin);11 freopen("output.txt", "w", stdout);12 scanf("%d",&n);13 for(int i=0;i 2 #include 3
阅读全文
摘要:首先能被2,5整除的数结尾必须是0;如果没有0肯定不行;然后判断他们的和ans%3:如果==0,直接从大到小输出就行;如果==1,要么删除它们之间最小的那个%3==1的,要么删除两个小的并且%3==2的;如果==2,要么删除它们之中最小的那个%2==2的,要么删除两个小的并且%3==1的;代码: 1 #include 2 using namespace std; 3 int n,d[10],a,u; 4 main() 5 { 6 cin>>n; 7 while(n--)cin>>a,++d[a],u+=a; 8 if(u%3) 9 {10 for...
阅读全文
摘要:树形DP:要求找出树上距离为k的点的对数;对于每个节点,经过这个节点的符合条件的的点有两种:第一种:距离他为i的儿子和他爸爸中距离他爸爸为k-i-1;(不是符合的点对中的一个)第二种:他儿子中距离为其儿子为k-1的点;(此节点为符合条件的点对中的一个) 1 #include 2 #include 3 #define N 50009 4 using namespace std; 5 vectorvec[N]; 6 int dp[N][505]; 7 long long ans; 8 void dfs(int x,int f,int k) 9 {10 dp[x][0]=1;11 ...
阅读全文
摘要:昨天想了一下D题,有点思路不过感觉很麻烦,就懒得去敲了;今天上午也想了一下,还是没有结果,看了一下官方题解,证明得很精彩;这道题目其实就是一道裸地最大上升子序列的题;看到这里,直接怒码···· 1 #include 2 #include 3 using namespace std; 4 int a[100009]; 5 int main() 6 { 7 int n,k,x,cnt=0; 8 scanf("%d",&n); 9 for(int i=0;i<n;i++)10 {11 scanf("%d",
阅读全文
摘要:C题很容易看懂题目,不过两个循环肯定会TLE,所以得用点小聪明;首先排好序,因为是全排列,乱序和顺序的结果是一样的;然后呢····如果是数列 1 2 3 4 5元素1 被 2 3 4 5每个减了2次,它自己减0一次;相抵后为-7;元素2 被 3 5 4 每个减了2次,它减1两次,减0一次;相抵后为 -3;元素3 相抵后为1;可以发现他们的数量相差4;这样就好办了,一个循环就搞定了;代码: 1 #include 2 #include 3 #include 4 using namespace std; 5 int a[100009]; 6 long long
阅读全文
摘要:B题是一个计算几何的题,虽然以前看过计算几何的ppt,但一直都没有写过;昨晚比赛的时候本来想写的,但是怕不熟练浪费时间,太可惜了!其实没必要选出一个最大的矩形;以矩形的一条对角线为轴,向上或者向下找到最大的三角形的面积就行了,可以看看官方的题解,讲的挺不错的!代码: 1 #include 2 #define eps 0.00000001 3 using namespace std; 4 int a[305][2]; 5 double ccw(int x,int y,int z) 6 { 7 return ((double)(a[y][0]-a[x][0])*(a[z][1]-a[x][...
阅读全文
摘要:最水的题,可惜当时赶时间没有注意数据范围;暴力超时了!其实应该用x,y的最大公约数来判断;代码: 1 #include 2 using namespace std; 3 int gcd(int a,int b) 4 { 5 return b==0?a:gcd(b,a%b); 6 } 7 int main() 8 { 9 int x,y,a,b;10 cin>>x>>y>>a>>b;11 if(x<y)12 {13 x=x^y;14 y=x^y;15 x=x^y;16 }17 int k=x/...
阅读全文
摘要:看了codeforces上的大神写的题解之后,才知道这道题水的根本!不过相对前面两题来说,这道题的思维要难一点;不过想到了水的根本,这题也真心不难;方法嘛,就像剥洋葱一样,从外面往里面剥;所以呢,dfs,每次往左或者往右找到乱序的那个元素,反转一下;这样就行了,而且题目说了保证能够在三次内搞定;证明我也不会,意思应该就是这样了! 1 #include 2 #include 3 #include 4 #define maxn 1009 5 using namespace std; 6 int a[maxn],n; 7 vectorl,r; 8 bool found=0; 9 int checkl
阅读全文
摘要:哎....这次的比赛被安叔骂的好惨!不行呢,要虐回来;这道搜索,老是写错,蛋疼啊!果然是基础没打好! 1 #include 2 using namespace std; 3 int ans[1009],m; 4 bool h[11],flag=true; 5 6 void dfs(int n,int ch,int x) 7 { 8 if(n>m) 9 {10 flag=false;11 printf("YES\n");12 for(int i=0; i<n; ++i)13 printf(" %d",ans...
阅读全文
摘要:这题也是一个线段树的水题;不过开始题目没看明白,害得我敲了一个好复杂的程序。蛋疼啊。。。。最后十几分钟的时候突然领悟到了题意,但是还是漏掉一个细节,老是过不去。。。以后比赛的时候不喝啤酒了,再也不喝了。。。。贴上代码: 1 #include 2 #include 3 #define maxn 262200 4 using namespace std; 5 6 struct tree 7 { 8 int num; 9 int l,r;10 tree *left,*right;11 } tr[maxn];12 int nodecount=0,a;13 14 void up...
阅读全文