洛谷P1161 开灯
Posted ZSYL
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了洛谷P1161 开灯相关的知识,希望对你有一定的参考价值。
题目描述
异或
异或就是把两个数拆成二进制,一位一位比较,某一位上一样返回0,不一样返回1。
一个数异或它本身得到0(因为每一位都一样全部返回0)
因此我们只需要设 ans=0 然后把所有的数异或一遍。因为只有一盏灯是开的,也就是说,其他编号出现的次数都是成对的,异或完都是0,剩下的那一个与0异或得它本身。因此最后ans就是结果。
JAVA
直接暴力,异或实现开关灯操作。
import java.util.Scanner;
public class Main
public static void main(String[] args)
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] x = new int[2000001];
int index = 0;
while (n-- > 0)
double a = sc.nextDouble();
int t = sc.nextInt();
for (int i = 1; i <= t; i++)
index = (int)(a*i);
x[index] ^= 1;
for (int i = 1; i < 2000001; i++)
if (x[i] == 1)
index = i;
break;
System.out.println(index);
C++
#include<iostream>
#include<bits/stdc++.h> //万能头文件
using namespace std;
int a[2000001], n;
double x, y;
int main()
cin >> n;
while (n-- > 0)
cin >>x>>y;
for (double i = 1; i <= y; i++)
a[int(i*x)] ^= 1;
for (int i = 1;;i++)
if (a[i] == 1)
cout << i;
break;
return 0;
大佬牛!
#include<bits/stdc++.h> //万能头文件
#define f(i,j,n) for(i=j;i<=n;i++) //for循环简写,福利福利~
using namespace std;
int main()
ios::sync_with_stdio(false); //cin,cout快读快输,写scanf和printf的就不要加了,会RE
int n,t,i,j,ans=0;
double a; //为了保险我们还是开double
cin>>n;
f(i,1,n)
cin>>a>>t;
f(j,1,t)
ans^=int(j*a); //重点:位运算,直接异或,这里注意要用int强制把j*a的值转换成整型
cout<<ans<<endl; //输出ans即可
return 0; //华丽丽地结束
加油!
感谢!
努力!
以上是关于洛谷P1161 开灯的主要内容,如果未能解决你的问题,请参考以下文章