题目描述异或JAVAC++大佬牛!
题目描述 异或异或就是把两个数拆成二进制,一位一位比较,某一位上一样返回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大佬牛!#include //万能头文件 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//万能头文件 #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<
加油!
感谢!
努力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)